Skip to content

Commit

Permalink
Utilise CommandFactory for Tx commands init.
Browse files Browse the repository at this point in the history
TODO utilise CommandFactory for any other commands that rely on init
initialisation in the constructor.
  • Loading branch information
ryanemerson committed Jun 17, 2019
1 parent c1ca153 commit 16e9829
Show file tree
Hide file tree
Showing 26 changed files with 149 additions and 215 deletions.
12 changes: 12 additions & 0 deletions core/src/main/java/org/infinispan/commands/CommandsFactory.java
Expand Up @@ -17,12 +17,15 @@
import javax.transaction.xa.Xid;

import org.infinispan.commands.control.LockControlCommand;
import org.infinispan.commands.functional.Mutation;
import org.infinispan.commands.functional.ReadOnlyKeyCommand;
import org.infinispan.commands.functional.ReadOnlyManyCommand;
import org.infinispan.commands.functional.ReadWriteKeyCommand;
import org.infinispan.commands.functional.ReadWriteKeyValueCommand;
import org.infinispan.commands.functional.ReadWriteManyCommand;
import org.infinispan.commands.functional.ReadWriteManyEntriesCommand;
import org.infinispan.commands.functional.TxReadOnlyKeyCommand;
import org.infinispan.commands.functional.TxReadOnlyManyCommand;
import org.infinispan.commands.functional.WriteOnlyKeyCommand;
import org.infinispan.commands.functional.WriteOnlyKeyValueCommand;
import org.infinispan.commands.functional.WriteOnlyManyCommand;
Expand Down Expand Up @@ -562,6 +565,15 @@ <K, V, R> ReadWriteManyCommand<K, V, R> buildReadWriteManyCommand(Collection<?>

<K, V, T, R> ReadWriteManyEntriesCommand<K, V, T, R> buildReadWriteManyEntriesCommand(Map<?, ?> entries, BiFunction<T, ReadWriteEntryView<K, V>, R> f, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion);

<K, V, R> TxReadOnlyKeyCommand<K, V, R> buildTxReadOnlyKeyCommand(Object key, Function<ReadEntryView<K, V>, R> f,
List<Mutation<K, V, ?>> mutations, int segment,
Params params, DataConversion keyDataConversion,
DataConversion valueDataConversion);

<K, V, R> TxReadOnlyManyCommand<K, V, R> buildTxReadOnlyManyCommand(Collection<?> keys, List<List<Mutation<K,V,?>>> mutations,
Params params, DataConversion keyDataConversion,
DataConversion valueDataConversion);

BackupAckCommand buildBackupAckCommand(long id, int topologyId);

BackupMultiKeyAckCommand buildBackupMultiKeyAckCommand(long id, int segment, int topologyId);
Expand Down
47 changes: 34 additions & 13 deletions core/src/main/java/org/infinispan/commands/CommandsFactoryImpl.java
Expand Up @@ -18,12 +18,15 @@

import org.infinispan.Cache;
import org.infinispan.commands.control.LockControlCommand;
import org.infinispan.commands.functional.Mutation;
import org.infinispan.commands.functional.ReadOnlyKeyCommand;
import org.infinispan.commands.functional.ReadOnlyManyCommand;
import org.infinispan.commands.functional.ReadWriteKeyCommand;
import org.infinispan.commands.functional.ReadWriteKeyValueCommand;
import org.infinispan.commands.functional.ReadWriteManyCommand;
import org.infinispan.commands.functional.ReadWriteManyEntriesCommand;
import org.infinispan.commands.functional.TxReadOnlyKeyCommand;
import org.infinispan.commands.functional.TxReadOnlyManyCommand;
import org.infinispan.commands.functional.WriteOnlyKeyCommand;
import org.infinispan.commands.functional.WriteOnlyKeyValueCommand;
import org.infinispan.commands.functional.WriteOnlyManyCommand;
Expand Down Expand Up @@ -223,12 +226,12 @@ public ReplaceCommand buildReplaceCommand(Object key, Object oldValue, Object ne

@Override
public ComputeCommand buildComputeCommand(Object key, BiFunction mappingFunction, boolean computeIfPresent, int segment, Metadata metadata, long flagsBitSet) {
return new ComputeCommand(key, mappingFunction, computeIfPresent, segment, flagsBitSet, generateUUID(transactional), metadata, componentRegistry);
return init(new ComputeCommand(key, mappingFunction, computeIfPresent, segment, flagsBitSet, generateUUID(transactional), metadata));
}

@Override
public ComputeIfAbsentCommand buildComputeIfAbsentCommand(Object key, Function mappingFunction, int segment, Metadata metadata, long flagsBitSet) {
return new ComputeIfAbsentCommand(key, mappingFunction, segment, flagsBitSet, generateUUID(transactional), metadata, componentRegistry);
return init(new ComputeIfAbsentCommand(key, mappingFunction, segment, flagsBitSet, generateUUID(transactional), metadata));
}

@Override
Expand Down Expand Up @@ -326,6 +329,12 @@ public void initializeReplicableCommand(ReplicableCommand c, boolean isRemote) {
}
}

@SuppressWarnings("unchecked")
private <T> T init(InitializableCommand cmd) {
cmd.init(componentRegistry, false);
return (T) cmd;
}

@Override
public LockControlCommand buildLockControlCommand(Collection<?> keys, long flagsBitSet, GlobalTransaction gtx) {
return new LockControlCommand(keys, cacheName, flagsBitSet, gtx);
Expand Down Expand Up @@ -477,36 +486,36 @@ private CommandInvocationId generateUUID(boolean tx) {
@Override
public <K, V, R> ReadOnlyKeyCommand<K, V, R> buildReadOnlyKeyCommand(Object key, Function<ReadEntryView<K, V>, R> f,
int segment, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new ReadOnlyKeyCommand<>(key, f, segment, params, keyDataConversion, valueDataConversion, componentRegistry);
return init(new ReadOnlyKeyCommand<>(key, f, segment, params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V, R> ReadOnlyManyCommand<K, V, R> buildReadOnlyManyCommand(Collection<?> keys, Function<ReadEntryView<K, V>, R> f, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new ReadOnlyManyCommand<>(keys, f, params, keyDataConversion, valueDataConversion, componentRegistry);
return init(new ReadOnlyManyCommand<>(keys, f, params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V, T, R> ReadWriteKeyValueCommand<K, V, T, R> buildReadWriteKeyValueCommand(Object key, Object argument,
BiFunction<T, ReadWriteEntryView<K, V>, R> f, int segment, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new ReadWriteKeyValueCommand(key, argument, f, segment, generateUUID(transactional), getValueMatcher(f),
params, keyDataConversion, valueDataConversion, componentRegistry);
return init(new ReadWriteKeyValueCommand<>(key, argument, f, segment, generateUUID(transactional), getValueMatcher(f),
params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V, R> ReadWriteKeyCommand<K, V, R> buildReadWriteKeyCommand(Object key,
Function<ReadWriteEntryView<K, V>, R> f, int segment, Params params, DataConversion keyDataConversion,
DataConversion valueDataConversion) {
return new ReadWriteKeyCommand<>(key, f, segment, generateUUID(transactional), getValueMatcher(f), params, keyDataConversion, valueDataConversion, componentRegistry);
return init(new ReadWriteKeyCommand<>(key, f, segment, generateUUID(transactional), getValueMatcher(f), params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V, R> ReadWriteManyCommand<K, V, R> buildReadWriteManyCommand(Collection<?> keys, Function<ReadWriteEntryView<K, V>, R> f, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new ReadWriteManyCommand<>(keys, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion, componentRegistry);
return init(new ReadWriteManyCommand<>(keys, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion));
}

@Override
public <K, V, T, R> ReadWriteManyEntriesCommand<K, V, T, R> buildReadWriteManyEntriesCommand(Map<?, ?> entries, BiFunction<T, ReadWriteEntryView<K, V>, R> f, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new ReadWriteManyEntriesCommand<>(entries, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion, componentRegistry);
return init(new ReadWriteManyEntriesCommand<>(entries, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion));
}

@Override
Expand All @@ -517,24 +526,36 @@ public InvalidateVersionsCommand buildInvalidateVersionsCommand(int topologyId,
@Override
public <K, V> WriteOnlyKeyCommand<K, V> buildWriteOnlyKeyCommand(
Object key, Consumer<WriteEntryView<K, V>> f, int segment, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new WriteOnlyKeyCommand<>(key, f, segment, generateUUID(transactional), getValueMatcher(f), params, keyDataConversion, valueDataConversion, componentRegistry);
return init(new WriteOnlyKeyCommand<>(key, f, segment, generateUUID(transactional), getValueMatcher(f), params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V, T> WriteOnlyKeyValueCommand<K, V, T> buildWriteOnlyKeyValueCommand(Object key, Object argument, BiConsumer<T, WriteEntryView<K, V>> f,
int segment, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new WriteOnlyKeyValueCommand<>(key, argument, f, segment, generateUUID(transactional), getValueMatcher(f), params, keyDataConversion, valueDataConversion, componentRegistry);
return init(new WriteOnlyKeyValueCommand<>(key, argument, f, segment, generateUUID(transactional), getValueMatcher(f), params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V> WriteOnlyManyCommand<K, V> buildWriteOnlyManyCommand(Collection<?> keys, Consumer<WriteEntryView<K, V>> f, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new WriteOnlyManyCommand<>(keys, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion, componentRegistry);
return init(new WriteOnlyManyCommand<>(keys, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion));
}

@Override
public <K, V, T> WriteOnlyManyEntriesCommand<K, V, T> buildWriteOnlyManyEntriesCommand(
Map<?, ?> arguments, BiConsumer<T, WriteEntryView<K, V>> f, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return new WriteOnlyManyEntriesCommand<>(arguments, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion, componentRegistry);
return init(new WriteOnlyManyEntriesCommand<>(arguments, f, params, generateUUID(transactional), keyDataConversion, valueDataConversion));
}

@Override
public <K, V, R> TxReadOnlyKeyCommand<K, V, R> buildTxReadOnlyKeyCommand(Object key, Function<ReadEntryView<K, V>, R> f, List<Mutation<K, V, ?>> mutations, int segment, Params params, DataConversion keyDataConversion, DataConversion valueDataConversion) {
return init(new TxReadOnlyKeyCommand<>(key, mutations, segment, params, keyDataConversion, valueDataConversion));
}

@Override
public <K, V, R> TxReadOnlyManyCommand<K, V, R> buildTxReadOnlyManyCommand(Collection<?> keys, List<List<Mutation<K, V, ?>>> mutations,
Params params, DataConversion keyDataConversion,
DataConversion valueDataConversion) {
return init(new TxReadOnlyManyCommand<K, V, R>(keys, mutations, params, keyDataConversion, valueDataConversion));
}

@Override
Expand Down
Expand Up @@ -4,6 +4,7 @@

import org.infinispan.commands.CommandInvocationId;
import org.infinispan.commands.InitializableCommand;
import org.infinispan.commands.functional.functions.InjectableComponent;
import org.infinispan.commands.write.AbstractDataWriteCommand;
import org.infinispan.commands.write.ValueMatcher;
import org.infinispan.encoding.DataConversion;
Expand All @@ -17,18 +18,19 @@ public abstract class AbstractWriteKeyCommand<K, V> extends AbstractDataWriteCom
boolean successful = true;
DataConversion keyDataConversion;
DataConversion valueDataConversion;
InjectableComponent f;

public AbstractWriteKeyCommand(Object key, ValueMatcher valueMatcher, int segment,
CommandInvocationId id, Params params,
DataConversion keyDataConversion,
DataConversion valueDataConversion,
ComponentRegistry componentRegistry) {
Object f) {
super(key, segment, params.toFlagsBitSet(), id);
this.valueMatcher = valueMatcher;
this.params = params;
this.keyDataConversion = keyDataConversion;
this.valueDataConversion = valueDataConversion;
init(componentRegistry);
this.f = f instanceof InjectableComponent ? (InjectableComponent) f : null;
}

public AbstractWriteKeyCommand() {
Expand All @@ -37,7 +39,10 @@ public AbstractWriteKeyCommand() {

@Override
public void init(ComponentRegistry componentRegistry, boolean isRemote) {
init(componentRegistry);
componentRegistry.wireDependencies(keyDataConversion);
componentRegistry.wireDependencies(valueDataConversion);
if (f != null)
f.inject(componentRegistry);
}

@Override
Expand Down Expand Up @@ -86,9 +91,4 @@ public DataConversion getKeyDataConversion() {
public DataConversion getValueDataConversion() {
return valueDataConversion;
}

protected void init(ComponentRegistry componentRegistry) {
componentRegistry.wireDependencies(keyDataConversion);
componentRegistry.wireDependencies(valueDataConversion);
}
}
Expand Up @@ -2,6 +2,7 @@

import org.infinispan.commands.CommandInvocationId;
import org.infinispan.commands.InitializableCommand;
import org.infinispan.commands.functional.functions.InjectableComponent;
import org.infinispan.commands.write.ValueMatcher;
import org.infinispan.commands.write.WriteCommand;
import org.infinispan.context.impl.FlagBitSets;
Expand All @@ -21,16 +22,19 @@ public abstract class AbstractWriteManyCommand<K, V> implements InitializableCom
long flags;
DataConversion keyDataConversion;
DataConversion valueDataConversion;
InjectableComponent f;

protected AbstractWriteManyCommand(CommandInvocationId commandInvocationId,
Params params,
DataConversion keyDataConversion,
DataConversion valueDataConversion) {
DataConversion valueDataConversion,
Object f) {
this.commandInvocationId = commandInvocationId;
this.params = params;
this.flags = params.toFlagsBitSet();
this.keyDataConversion = keyDataConversion;
this.valueDataConversion = valueDataConversion;
this.f = f instanceof InjectableComponent ? (InjectableComponent) f : null;
}

protected <K, V> AbstractWriteManyCommand(AbstractWriteManyCommand<K, V> command) {
Expand All @@ -45,7 +49,10 @@ protected AbstractWriteManyCommand() {

@Override
public void init(ComponentRegistry componentRegistry, boolean isRemote) {
init(componentRegistry);
componentRegistry.wireDependencies(keyDataConversion);
componentRegistry.wireDependencies(valueDataConversion);
if (f != null)
f.inject(componentRegistry);
}

@Override
Expand Down Expand Up @@ -144,9 +151,4 @@ public DataConversion getKeyDataConversion() {
public DataConversion getValueDataConversion() {
return valueDataConversion;
}

protected void init(ComponentRegistry componentRegistry) {
componentRegistry.wireDependencies(keyDataConversion);
componentRegistry.wireDependencies(valueDataConversion);
}
}
Expand Up @@ -54,9 +54,9 @@ static <K, V, T, R> void writeTo(ObjectOutput output, Mutation<K, V, R> mutation
DataConversion valueDataConversion = DataConversion.readFrom(input);
switch (input.readByte()) {
case ReadWrite.TYPE:
return new ReadWrite<>(keyDataConversion, valueDataConversion, (Function<EntryView.ReadWriteEntryView<K, V>, ?>) input.readObject());
return new ReadWrite<>(keyDataConversion, valueDataConversion, (Function<EntryView.ReadWriteEntryView<K, V>, T>) input.readObject());
case ReadWriteWithValue.TYPE:
return new ReadWriteWithValue<>(keyDataConversion, valueDataConversion, input.readObject(), (BiFunction<V, EntryView.ReadWriteEntryView<K, V>, ?>) input.readObject());
return new ReadWriteWithValue<>(keyDataConversion, valueDataConversion, input.readObject(), (BiFunction<V, EntryView.ReadWriteEntryView<K, V>, T>) input.readObject());
case Write.TYPE:
return new Write<>(keyDataConversion, valueDataConversion, (Consumer<EntryView.WriteEntryView<K, V>>) input.readObject());
case WriteWithValue.TYPE:
Expand Down
Expand Up @@ -29,26 +29,20 @@ public class ReadOnlyKeyCommand<K, V, R> extends AbstractDataCommand implements

public ReadOnlyKeyCommand(Object key, Function<ReadEntryView<K, V>, R> f, int segment, Params params,
DataConversion keyDataConversion,
DataConversion valueDataConversion,
ComponentRegistry componentRegistry) {
DataConversion valueDataConversion) {
super(key, segment, EnumUtil.EMPTY_BIT_SET);
this.f = f;
this.params = params;
this.keyDataConversion = keyDataConversion;
this.valueDataConversion = valueDataConversion;
this.setFlagsBitSet(params.toFlagsBitSet());
init(componentRegistry);
}

public ReadOnlyKeyCommand() {
}

@Override
public void init(ComponentRegistry componentRegistry, boolean isRemote) {
init(componentRegistry);
}

protected void init(ComponentRegistry componentRegistry) {
componentRegistry.wireDependencies(keyDataConversion);
componentRegistry.wireDependencies(valueDataConversion);
if (f instanceof InjectableComponent)
Expand Down
Expand Up @@ -31,15 +31,13 @@ public ReadOnlyManyCommand(Collection<?> keys,
Function<ReadEntryView<K, V>, R> f,
Params params,
DataConversion keyDataConversion,
DataConversion valueDataConversion,
ComponentRegistry componentRegistry) {
DataConversion valueDataConversion) {
this.keys = keys;
this.f = f;
this.params = params;
this.keyDataConversion = keyDataConversion;
this.valueDataConversion = valueDataConversion;
this.setFlagsBitSet(params.toFlagsBitSet());
init(componentRegistry);
}

public ReadOnlyManyCommand() {
Expand All @@ -56,10 +54,6 @@ public ReadOnlyManyCommand(ReadOnlyManyCommand c) {

@Override
public void init(ComponentRegistry componentRegistry, boolean isRemote) {
init(componentRegistry);
}

public void init(ComponentRegistry componentRegistry) {
componentRegistry.wireDependencies(keyDataConversion);
componentRegistry.wireDependencies(valueDataConversion);
}
Expand Down

0 comments on commit 16e9829

Please sign in to comment.