Пример #1
0
        public IEnumerable <T> Stores <T, K, V>(StoreQueryParameters <T, K, V> storeQueryParameters)
            where T : class
        {
            string storeName = storeQueryParameters.StoreName;
            IQueryableStoreType <T, K, V> queryableStoreType = storeQueryParameters.QueryableStoreType;
            IStateStore stateStore;

            if (!globalStateStores.TryGetValue(storeName, out stateStore) || !queryableStoreType.Accepts(stateStore))
            {
                return(Enumerable.Empty <T>());
            }

            if (!stateStore.IsOpen)
            {
                throw new InvalidStateStoreException($"the state store, {storeName}, is not open.");
            }
            if (stateStore is ITimestampedKeyValueStore <K, V> && queryableStoreType is KeyValueStoreType <K, V> )
            {
                return(new[] { new ReadOnlyKeyValueStoreFacade <K, V>(stateStore as ITimestampedKeyValueStore <K, V>) as T });
            }
            else if (stateStore is ITimestampedWindowStore <K, V> && queryableStoreType is WindowStoreType <K, V> )
            {
                return(new[] { new ReadOnlyWindowStoreFacade <K, V>(stateStore as ITimestampedWindowStore <K, V>) as T });
            }
            else
            {
                return new[] { stateStore as T }
            };
        }
    }
Пример #2
0
        public IEnumerable <T> Stores <T, K, V>(StoreQueryParameters <T, K, V> storeQueryParameters)
            where T : class
        {
            string storeName = storeQueryParameters.StoreName;
            IQueryableStoreType <T, K, V> queryableStoreType = storeQueryParameters.QueryableStoreType;
            IStateStore stateStore;

            if (!globalStateStores.TryGetValue(storeName, out stateStore) || !queryableStoreType.Accepts(stateStore))
            {
                return(Enumerable.Empty <T>());
            }

            if (!stateStore.IsOpen)
            {
                throw new InvalidStateStoreException($"the state store, {storeName}, is not open.");
            }
            if (stateStore is TimestampedKeyValueStore <K, V> && queryableStoreType is KeyValueStoreType <K, V> )
            {
                return(new[] { new ReadOnlyKeyValueStoreFacade <K, V>(stateStore as TimestampedKeyValueStore <K, V>) as T });
            }
            // TODO: handle TimestampedWindowStore
            //} else if (store instanceof TimestampedWindowStore && queryableStoreType instanceof QueryableStoreTypes.WindowStoreType) {
            //    return (List<T>) Collections.singletonList(new ReadOnlyWindowStoreFacade((TimestampedWindowStore<Object, Object>) store));
            //}

            return(new[] { stateStore as T });
        }
 public CompositeReadOnlyKeyValueStore(
     IStateStoreProvider <IReadOnlyKeyValueStore <K, V>, K, V> storeProvider,
     IQueryableStoreType <IReadOnlyKeyValueStore <K, V>, K, V> storeType, string storeName)
 {
     this.storeProvider = storeProvider;
     this.storeType     = storeType;
     this.storeName     = storeName;
 }
        /// <summary>
        /// Provides access to <see cref="Processors.IStateStore"/>s accepted by <see cref="IQueryableStoreType{T, K, V}.Accepts(IStateStore)"/>
        /// </summary>
        /// <param name="storeName">Name of the store</param>
        /// <param name="queryableStoreType">The <see cref="IQueryableStoreType{T, K, V}"/></param>
        /// <returns>a List of all the stores with the storeName and accepted by<see cref="IQueryableStoreType{T, K, V}.Accepts(IStateStore)"/></returns>
        public IEnumerable <T> Stores(string storeName, IQueryableStoreType <T, K, V> queryableStoreType)
        {
            var allStores = storeProviders
                            .SelectMany(store => store.Stores(storeQueryParameters));

            if (!allStores.Any())
            {
                throw new InvalidStateStoreException($"The state store, {storeName}, may have migrated to another instance.");
            }

            return(allStores);
        }
 public IEnumerable <IReadOnlyKeyValueStore <K, V> > Stores(string storeName,
                                                            IQueryableStoreType <IReadOnlyKeyValueStore <K, V>, K, V> queryableStoreType)
 {
     return
         (stores
          .Where(s => s.Name.Equals(storeName))
          .Select <ITimestampedKeyValueStore <K, V>, IReadOnlyKeyValueStore <K, V> >(s =>
     {
         if (s is IReadOnlyKeyValueStore <K, V> )
         {
             return s as IReadOnlyKeyValueStore <K, V>;
         }
         else if (s is ITimestampedKeyValueStore <K, V> )
         {
             return new ReadOnlyKeyValueStoreFacade <K, V>(s);
         }
         else
         {
             return null;
         }
     }));
 }
 public IEnumerable <T> Stores(string storeName, IQueryableStoreType <T, K, V> queryableStoreType)
 {
     return(this.globalStateStoreProvider.Stores(StoreQueryParameters.FromNameAndType(storeName, queryableStoreType)));
 }
Пример #7
0
 /// <summary>
 /// Creates <see cref="StoreQueryParameters{T, K, V}"/> with specified storeName and queryableStoreType
 /// </summary>
 /// <typeparam name="T">The type of the Store to be fetched</typeparam>
 /// <typeparam name="K">The type of key</typeparam>
 /// <typeparam name="V">The type of value</typeparam>
 /// <param name="storeName">The name of the state store that should be queried.</param>
 /// <param name="queryableStoreType">The <see cref="IQueryableStoreType{T, K, V}"/> for which key is queried by the user.</param>
 /// <returns><see cref="StoreQueryParameters{T, K, V}"/> with provided <code>name</code> and <code>queryableStoreType</code></returns>
 public static StoreQueryParameters <T, K, V> FromNameAndType <T, K, V>(string storeName, IQueryableStoreType <T, K, V> queryableStoreType) where T : class
 {
     return(new StoreQueryParameters <T, K, V>(storeName, queryableStoreType, null, false));
 }
Пример #8
0
 public CompositeReadOnlyWindowStore(IStateStoreProvider <ReadOnlyWindowStore <K, V>, K, V> storeProvider, WindowStoreType <K, V> storeType, string storeName)
 {
     this.storeProvider = storeProvider;
     this.storeType     = storeType;
     this.storeName     = storeName;
 }
Пример #9
0
 public IEnumerable <ReadOnlyWindowStore <K, V> > Stores(string storeName, IQueryableStoreType <ReadOnlyWindowStore <K, V>, K, V> queryableStoreType)
 {
     return
         (stores
          .Where(s => s.Name.Equals(storeName))
          .Select <TimestampedWindowStore <K, V>, ReadOnlyWindowStore <K, V> >(s =>
     {
         if (s is ReadOnlyWindowStore <K, V> )
         {
             return s as ReadOnlyWindowStore <K, V>;
         }
         else if (s is TimestampedWindowStore <K, V> )
         {
             return new ReadOnlyWindowStoreFacade <K, V>(s);
         }
         else
         {
             return null;
         }
     }));
 }