Class StateSynchronizerImpl<StateT extends Revisioned>

    • Constructor Detail

      • StateSynchronizerImpl

        public StateSynchronizerImpl​(Segment segment,
                                     RevisionedStreamClient<UpdateOrInit<StateT>> client)
        Creates a new instance of StateSynchronizer class.
        Parameters:
        segment - The segment.
        client - The revisioned stream client this state synchronizer builds upon."
    • Method Detail

      • updateState

        public void updateState​(StateSynchronizer.UpdateGenerator<StateT> updateGenerator)
        Description copied from interface: StateSynchronizer
        Creates a new update for the latest state object and applies it atomically. The UpdateGenerator provided will be passed the latest state object and a list which it can populate with any updates that need to be applied. These updates are recorded and applied conditionally on the state object that was passed to the function being up to date. If another process was applying an update in parallel, the state is updated and updateGenerator will be called again with the new state object so that it may generate new updates. (Which may be different from the one it previously generated) By re-creating the updates in this way, consistency is guaranteed. When this function returns the generated updates will have been applied to the local state.
        Specified by:
        updateState in interface StateSynchronizer<StateT extends Revisioned>
        Parameters:
        updateGenerator - A function that given the current state can supply updates that should be applied.
      • updateState

        public <ReturnT> ReturnT updateState​(StateSynchronizer.UpdateGeneratorFunction<StateT,​ReturnT> updateGenerator)
        Description copied from interface: StateSynchronizer
        Similar to StateSynchronizer.updateState(UpdateGenerator) but this version returns a result object supplied by the StateSynchronizer.UpdateGeneratorFunction. This is useful if the calling code wishes to do something in response to the update. As an example suppose the update type was MyUpdate and each update and an associated key. Then it might be useful to return the updated keys:
         
         List<String> updated = stateSynchronizer.updateState((state, updates) -> {
              List<MyUpdate> toAdd = findUpdatesForState(state);
              updates.addAll(toAdd);
              return toAdd.stream().map(a -> a.getKey()).collect(Collectors.toList());
         });
         
         
        Specified by:
        updateState in interface StateSynchronizer<StateT extends Revisioned>
        Type Parameters:
        ReturnT - They type of the result returned by the updateGenerator
        Parameters:
        updateGenerator - A function which give the state can supply updates that should be applied.
        Returns:
        the result returned by the updateGenerator.
      • compact

        public void compact​(java.util.function.Function<StateT,​InitialUpdate<StateT>> compactor)
        Description copied from interface: StateSynchronizer
        Provide a function that generates compacted version of localState so that we can drop some of the history updates.

        NOTE: If InitialUpdate returned does not generate local state exactly corruption will occur.

        Specified by:
        compact in interface StateSynchronizer<StateT extends Revisioned>
        Parameters:
        compactor - An generator of InitialUpdates given a state.
      • close

        public void close()
        Description copied from interface: StateSynchronizer
        Closes the StateSynchronizer and frees any resources associated with it. (It may no longer be used)
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface StateSynchronizer<StateT extends Revisioned>
        See Also:
        AutoCloseable.close()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object