diff --git a/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/CassandraDBAccessorTest.java b/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/CassandraDBAccessorTest.java index 7170c19a5..d407fb62e 100644 --- a/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/CassandraDBAccessorTest.java +++ b/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/CassandraDBAccessorTest.java @@ -24,6 +24,7 @@ import com.datastax.driver.core.Statement; import com.typesafe.config.ConfigFactory; import cz.o2.proxima.repository.AttributeDescriptor; +import cz.o2.proxima.repository.AttributeDescriptorBase; import cz.o2.proxima.repository.EntityDescriptor; import cz.o2.proxima.repository.Repository; import cz.o2.proxima.storage.Partition; @@ -201,8 +202,8 @@ public BoundStatement scanPartition( Repository repo = Repository.Builder.ofTest(ConfigFactory.defaultApplication()).build(); - AttributeDescriptor attr; - AttributeDescriptor attrWildcard; + AttributeDescriptorBase attr; + AttributeDescriptorBase attrWildcard; EntityDescriptor entity; public CassandraDBAccessorTest() throws URISyntaxException { diff --git a/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/DefaultCQLFactoryTest.java b/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/DefaultCQLFactoryTest.java index 1eafe8767..a3d3df8df 100644 --- a/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/DefaultCQLFactoryTest.java +++ b/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/DefaultCQLFactoryTest.java @@ -22,6 +22,7 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import cz.o2.proxima.repository.AttributeDescriptor; +import cz.o2.proxima.repository.AttributeDescriptorBase; import cz.o2.proxima.repository.EntityDescriptor; import cz.o2.proxima.repository.Repository; import cz.o2.proxima.storage.StreamElement; @@ -47,8 +48,8 @@ public class DefaultCQLFactoryTest { final Config cfg = ConfigFactory.defaultApplication(); final Repository repo = Repository.Builder.ofTest(cfg).build(); - final AttributeDescriptor attr; - final AttributeDescriptor attrWildcard; + final AttributeDescriptorBase attr; + final AttributeDescriptorBase attrWildcard; final EntityDescriptor entity; final PreparedStatement statement = mock(PreparedStatement.class); final Session session = mock(Session.class); diff --git a/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/TransformingCQLFactoryTest.java b/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/TransformingCQLFactoryTest.java index f83bc74e1..ae2937916 100644 --- a/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/TransformingCQLFactoryTest.java +++ b/cassandra/src/test/java/cz/o2/proxima/storage/cassandra/TransformingCQLFactoryTest.java @@ -21,6 +21,7 @@ import com.datastax.driver.core.Session; import com.typesafe.config.ConfigFactory; import cz.o2.proxima.repository.AttributeDescriptor; +import cz.o2.proxima.repository.AttributeDescriptorBase; import cz.o2.proxima.repository.EntityDescriptor; import cz.o2.proxima.repository.Repository; import cz.o2.proxima.storage.StreamElement; @@ -44,7 +45,7 @@ public class TransformingCQLFactoryTest { Repository repo = Repository.Builder.ofTest(ConfigFactory.defaultApplication()).build(); - AttributeDescriptor attr; + AttributeDescriptorBase attr; EntityDescriptor entity; final List statements = new ArrayList<>(); diff --git a/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptor.java b/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptor.java index e5692fe65..7276e91b4 100644 --- a/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptor.java +++ b/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptor.java @@ -30,6 +30,20 @@ */ public interface AttributeDescriptor extends Serializable { + static class NoOpTransform implements ProxyTransform { + + @Override + public String fromProxy(String access) { + return access; + } + + @Override + public String toProxy(String raw) { + return raw; + } + + } + class Builder { @@ -52,7 +66,7 @@ private Builder(Repository repo) { private URI schemeURI; @SuppressWarnings("unchecked") - public AttributeDescriptor build() { + public AttributeDescriptorImpl build() { Objects.requireNonNull(name, "Please specify name"); Objects.requireNonNull(entity, "Please specify entity"); Objects.requireNonNull(schemeURI, "Please specify scheme URI"); @@ -66,6 +80,14 @@ static Builder newBuilder(Repository repo) { return new Builder(repo); } + static AttributeDescriptorBase newProxy( + String name, + AttributeDescriptorBase target, + ProxyTransform transform) { + + return new AttributeProxyDescriptorImpl<>(name, target, transform); + } + /** Retrieve name of the attribute. */ String getName(); @@ -101,4 +123,10 @@ default String toAttributePrefix() { */ ValueSerializer getValueSerializer(); + /** + * Marker if this is a public attribute. + * @return {@code true} it this is public attribute + */ + boolean isPublic(); + } diff --git a/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorBase.java b/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorBase.java new file mode 100644 index 000000000..d3a9cf736 --- /dev/null +++ b/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorBase.java @@ -0,0 +1,116 @@ +/** + * Copyright 2017 O2 Czech Republic, a.s. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cz.o2.proxima.repository; + +import cz.o2.proxima.scheme.ValueSerializer; +import cz.o2.proxima.storage.OnlineAttributeWriter; +import java.net.URI; +import java.util.Objects; +import lombok.Getter; +import lombok.Setter; + +/** + * Base class for {@link AttributeDescriptorImpl} and {@link AttributeProxyDescriptorImpl}. + */ +public abstract class AttributeDescriptorBase implements AttributeDescriptor { + + @Getter + protected final String entity; + + @Getter + protected final String name; + + @Getter + protected final URI schemeURI; + + @Getter + protected final boolean proxy; + + @Getter + protected final boolean wildcard; + + @Getter + protected final ValueSerializer valueSerializer; + + @Getter + @Setter + protected OnlineAttributeWriter writer = null; + + public AttributeDescriptorBase( + String name, String entity, URI schemeURI, + ValueSerializer valueSerializer) { + + this.name = Objects.requireNonNull(name); + this.entity = Objects.requireNonNull(entity); + this.schemeURI = Objects.requireNonNull(schemeURI); + this.wildcard = this.name.endsWith(".*"); + this.proxy = false; + this.valueSerializer = Objects.requireNonNull(valueSerializer); + if (this.wildcard) { + if (name.length() < 3 + || name.substring(0, name.length() - 1).contains("*") + || name.charAt(name.length() - 2) != '.') { + + throw new IllegalArgumentException( + "Please specify wildcard attributes only in the format `.*; for now. " + + "That is - wildcard attributes can contain only single asterisk " + + "right after a dot at the end of the attribute name. " + + "This is implementation constraint for now."); + } + } + } + + public AttributeDescriptorBase(String name, AttributeDescriptorBase target) { + this.name = Objects.requireNonNull(name); + this.entity = target.getEntity(); + this.schemeURI = target.getSchemeURI(); + this.proxy = true; + this.wildcard = target.isWildcard(); + this.valueSerializer = target.getValueSerializer(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof AttributeDescriptor) { + AttributeDescriptor other = (AttributeDescriptor) obj; + return Objects.equals(other.getEntity(), entity) && Objects.equals(other.getName(), name); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(entity, name); + } + + /** + * Retrieve name of the attribute if not wildcard, otherwise + * retrieve the prefix without the last asterisk. + */ + @Override + public String toAttributePrefix(boolean includeLastDot) { + if (isWildcard()) { + return name.substring(0, name.length() - (includeLastDot ? 1 : 2)); + } + return name; + } + + @Override + public boolean isPublic() { + return !name.startsWith("_"); + } + +} diff --git a/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorImpl.java b/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorImpl.java index 9e85878f4..059a2ffde 100644 --- a/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorImpl.java +++ b/core/src/main/java/cz/o2/proxima/repository/AttributeDescriptorImpl.java @@ -17,91 +17,26 @@ package cz.o2.proxima.repository; import java.net.URI; -import java.util.Objects; -import lombok.Getter; -import cz.o2.proxima.storage.OnlineAttributeWriter; import cz.o2.proxima.scheme.ValueSerializer; /** * Descriptor of attribute of entity. */ -public class AttributeDescriptorImpl implements AttributeDescriptor { - - @Getter - private final String name; - - @Getter - private final boolean isWildcard; - - @Getter - private final URI schemeURI; - - @Getter - private final ValueSerializer valueSerializer; - - @Getter - private final String entity; - - @Getter - private OnlineAttributeWriter writer; +public class AttributeDescriptorImpl + extends AttributeDescriptorBase { AttributeDescriptorImpl( String name, String entity, - URI schemeURI, ValueSerializer parser) { - - this.name = Objects.requireNonNull(name); - this.schemeURI = Objects.requireNonNull(schemeURI); - this.valueSerializer = Objects.requireNonNull(parser); - this.entity = Objects.requireNonNull(entity); - this.isWildcard = this.name.contains("*"); - if (this.isWildcard) { - if (name.length() < 3 - || name.substring(0, name.length() - 1).contains("*") - || name.charAt(name.length() - 2) != '.') { - - throw new IllegalArgumentException( - "Please specify wildcard attributes only in the format `.*; for now. " - + "That is - wildcard attributes can contain only single asterisk " - + "right after a dot at the end of the attribute name. " - + "This is implementation constraint for now."); - } - } - } - - public void setWriter(OnlineAttributeWriter writer) { - this.writer = writer; - } + URI schemeURI, ValueSerializer serializer) { - @Override - public boolean equals(Object obj) { - if (obj instanceof AttributeDescriptor) { - AttributeDescriptor other = (AttributeDescriptor) obj; - return Objects.equals(other.getEntity(), entity) - && Objects.equals(other.getName(), name); - } - return false; + super(name, entity, schemeURI, serializer); } - @Override - public int hashCode() { - return Objects.hash(entity, name); - } @Override public String toString() { return "AttributeDescriptor(entity=" + entity + ", name=" + name + ")"; } - /** - * Retrieve name of the attribute if not wildcard, otherwise - * retrieve the prefix without the last asterisk. - */ - @Override - public String toAttributePrefix(boolean includeLastDot) { - if (isWildcard()) { - return name.substring(0, name.length() - (includeLastDot ? 1 : 2)); - } - return name; - } } diff --git a/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyDescriptor.java b/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyDescriptor.java index f18dd6f38..09eb6f9c7 100644 --- a/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyDescriptor.java +++ b/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyDescriptor.java @@ -38,7 +38,7 @@ /** * A family of attributes with the same storage. */ -public class AttributeFamilyDescriptor { +public class AttributeFamilyDescriptor { public static final class Builder { @@ -82,13 +82,13 @@ public static final class Builder { private Builder() { } - public Builder addAttribute(AttributeDescriptor desc) { + public Builder addAttribute(AttributeDescriptor desc) { attributes.add(desc); return this; } - public AttributeFamilyDescriptor build() { - return new AttributeFamilyDescriptor<>( + public AttributeFamilyDescriptor build() { + return new AttributeFamilyDescriptor( name, type, attributes, writer, commitLog, batchObservable, randomAccess, partitionedView, access, filter); } @@ -119,7 +119,7 @@ public static Builder newBuilder() { * Writer associated with this attribute family. */ @Nullable - private final W writer; + private final AttributeWriterBase writer; @Nullable private final CommitLogReader commitLogReader; @@ -133,10 +133,10 @@ public static Builder newBuilder() { @Nullable private final PartitionedView partitionedView; - private AttributeFamilyDescriptor(String name, + AttributeFamilyDescriptor(String name, StorageType type, List> attributes, - @Nullable W writer, + @Nullable AttributeWriterBase writer, @Nullable CommitLogReader commitLogReader, @Nullable BatchLogObservable batchObservable, @Nullable RandomAccessReader randomAccess, @@ -183,9 +183,10 @@ public int hashCode() { * Retrieve writer for this family. * Empty if this family is not writable */ - public Optional getWriter() { + public Optional getWriter() { if (!access.isReadonly()) { - return Optional.of(Objects.requireNonNull(writer)); + return Optional.of(Objects.requireNonNull( + writer, "Family " + name + " is not readonly, but has no writer")); } return Optional.empty(); } @@ -196,7 +197,8 @@ public Optional getWriter() { */ public Optional getCommitLogReader() { if (access.canReadCommitLog()) { - return Optional.of(Objects.requireNonNull(commitLogReader)); + return Optional.of(Objects.requireNonNull( + commitLogReader, "Family " + name + " doesn't have commit-log reader")); } return Optional.empty(); } @@ -206,7 +208,8 @@ public Optional getCommitLogReader() { */ public Optional getBatchObservable() { if (access.canReadBatchSnapshot() || access.canReadBatchUpdates()) { - return Optional.of(Objects.requireNonNull(batchObservable)); + return Optional.of(Objects.requireNonNull( + batchObservable, "Family " + name + " doesn't have batch observable")); } return Optional.empty(); } @@ -218,7 +221,8 @@ public Optional getBatchObservable() { */ public Optional getRandomAccessReader() { if (access.canRandomRead()) { - return Optional.of(Objects.requireNonNull(randomAccess)); + return Optional.of(Objects.requireNonNull( + randomAccess, "Family " + name + " doesn't have random access reader")); } return Optional.empty(); } @@ -229,7 +233,8 @@ public Optional getRandomAccessReader() { */ public Optional getPartitionedView() { if (access.canCreatePartitionedView()) { - return Optional.of(Objects.requireNonNull(partitionedView)); + return Optional.of(Objects.requireNonNull( + partitionedView, "Family " + name + " doesn't have partitioned view")); } return Optional.empty(); } diff --git a/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyProxyDescriptor.java b/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyProxyDescriptor.java new file mode 100644 index 000000000..fe1d1d81e --- /dev/null +++ b/core/src/main/java/cz/o2/proxima/repository/AttributeFamilyProxyDescriptor.java @@ -0,0 +1,482 @@ +/** + * Copyright 2017 O2 Czech Republic, a.s. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cz.o2.proxima.repository; + +import cz.o2.proxima.storage.AccessType; +import cz.o2.proxima.storage.AttributeWriterBase; +import cz.o2.proxima.storage.CommitCallback; +import cz.o2.proxima.storage.OnlineAttributeWriter; +import cz.o2.proxima.storage.Partition; +import cz.o2.proxima.storage.StorageType; +import cz.o2.proxima.storage.StreamElement; +import cz.o2.proxima.storage.batch.BatchLogObservable; +import cz.o2.proxima.storage.batch.BatchLogObserver; +import cz.o2.proxima.storage.commitlog.BulkLogObserver; +import cz.o2.proxima.storage.commitlog.Cancellable; +import cz.o2.proxima.storage.commitlog.CommitLogReader; +import cz.o2.proxima.storage.commitlog.LogObserver; +import cz.o2.proxima.storage.randomaccess.KeyValue; +import cz.o2.proxima.storage.randomaccess.RandomAccessReader; +import cz.o2.proxima.util.Pair; +import cz.o2.proxima.view.PartitionedLogObserver; +import cz.o2.proxima.view.PartitionedView; +import cz.seznam.euphoria.core.client.dataset.Dataset; +import cz.seznam.euphoria.core.client.flow.Flow; +import java.io.IOException; +import java.net.URI; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * Proxy attribute family applying transformations of attributes + * to and from private space to public space. + */ +class AttributeFamilyProxyDescriptor extends AttributeFamilyDescriptor { + + AttributeFamilyProxyDescriptor( + AttributeProxyDescriptorImpl targetAttribute, + AttributeFamilyDescriptor targetFamily) { + super( + "proxy::" + targetAttribute.getName() + "::" + targetFamily.getName(), + targetFamily.getType(), + Arrays.asList(targetAttribute), getWriter(targetAttribute, targetFamily), + getCommitLogReader(targetAttribute, targetFamily), + getBatchObservable(targetAttribute, targetFamily), + getRandomAccess(targetAttribute, targetFamily), + getPartitionedView(targetAttribute, targetFamily), + targetFamily.getType() == StorageType.PRIMARY + ? targetFamily.getAccess() + : AccessType.or(targetFamily.getAccess(), AccessType.from("read-only")), + targetFamily.getFilter()); + } + + private static OnlineAttributeWriter getWriter( + AttributeProxyDescriptorImpl targetAttribute, + AttributeFamilyDescriptor targetFamily) { + + Optional w = targetFamily.getWriter(); + if (!w.isPresent() || !(w.get() instanceof OnlineAttributeWriter)) { + return null; + } + OnlineAttributeWriter writer = w.get().online(); + return new OnlineAttributeWriter() { + + @Override + public void rollback() { + writer.rollback(); + } + + @Override + public void write(StreamElement data, CommitCallback statusCallback) { + writer.write( + transformToRaw(data, targetAttribute), + statusCallback); + } + + @Override + public URI getURI() { + return writer.getURI(); + } + + }; + } + + private static CommitLogReader getCommitLogReader( + AttributeProxyDescriptorImpl targetAttribute, + AttributeFamilyDescriptor targetFamily) { + + Optional target = targetFamily.getCommitLogReader(); + if (!target.isPresent()) { + return null; + } + CommitLogReader reader = target.get(); + return new CommitLogReader() { + + @Override + public URI getURI() { + return reader.getURI(); + } + + @Override + public List getPartitions() { + return reader.getPartitions(); + } + + @Override + public Cancellable observe( + String name, + CommitLogReader.Position position, LogObserver observer) { + + return reader.observe( + name, position, wrapTransformed(targetAttribute, observer)); + } + + @Override + public Cancellable observePartitions( + Collection partitions, CommitLogReader.Position position, + boolean stopAtCurrent, LogObserver observer) { + + return reader.observePartitions( + partitions, position, stopAtCurrent, + wrapTransformed(targetAttribute, observer)); + } + + @Override + public Cancellable observeBulk( + String name, CommitLogReader.Position position, + BulkLogObserver observer) { + + return reader.observeBulk(name, position, wrapTransformed(observer)); + } + + @Override + public void close() throws IOException { + reader.close(); + } + + }; + } + + + private static BatchLogObservable getBatchObservable( + AttributeProxyDescriptorImpl targetAttribute, + AttributeFamilyDescriptor targetFamily) { + + Optional target = targetFamily.getBatchObservable(); + if (!target.isPresent()) { + return null; + } + BatchLogObservable reader = target.get(); + return new BatchLogObservable() { + + @Override + public List getPartitions(long startStamp, long endStamp) { + return reader.getPartitions(startStamp, endStamp); + } + + @Override + public void observe( + List partitions, + List> attributes, + BatchLogObserver observer) { + + reader.observe(partitions, attributes, wrapTransformed(observer)); + } + + }; + } + + private static RandomAccessReader getRandomAccess( + AttributeProxyDescriptorImpl targetAttribute, + AttributeFamilyDescriptor targetFamily) { + + Optional target = targetFamily.getRandomAccessReader(); + if (!target.isPresent()) { + return null; + } + RandomAccessReader reader = target.get(); + return new RandomAccessReader() { + + @Override + public RandomAccessReader.Offset fetchOffset( + RandomAccessReader.Listing type, String key) { + + if (type == Listing.ATTRIBUTE) { + return reader.fetchOffset( + type, targetAttribute.getTransform().fromProxy(key)); + } + return reader.fetchOffset(type, key); + } + + @Override + public Optional> get( + String key, String attribute, AttributeDescriptor desc) { + + ProxyTransform transform = targetAttribute.getTransform(); + return reader.get(key, transform.fromProxy(attribute), desc) + .map(kv -> transformToProxy(kv, targetAttribute)); + } + + @Override + public void scanWildcard( + String key, AttributeDescriptor wildcard, + RandomAccessReader.Offset offset, int limit, Consumer> consumer) { + + if (!targetAttribute.isWildcard()) { + throw new IllegalArgumentException( + "Proxy target is not wildcard attribute!"); + } + reader.scanWildcard(key, targetAttribute.getTarget(), offset, limit, kv -> { + consumer.accept(transformToProxy(kv, targetAttribute)); + }); + } + + @Override + public void listEntities( + RandomAccessReader.Offset offset, int limit, + Consumer> consumer) { + + } + + @Override + public void close() throws IOException { + } + + }; + } + + private static PartitionedView getPartitionedView( + AttributeProxyDescriptorImpl targetAttribute, + AttributeFamilyDescriptor targetFamily) { + + Optional target = targetFamily.getPartitionedView(); + if (!target.isPresent()) { + return null; + } + PartitionedView view = target.get(); + return new PartitionedView() { + + @Override + public List getPartitions() { + return view.getPartitions(); + } + + @Override + public Dataset observePartitions( + Flow flow, + Collection partitions, + PartitionedLogObserver observer) { + + return view.observePartitions(flow, partitions, wrapTransformed( + targetAttribute, observer)); + } + + @Override + public Dataset observe( + Flow flow, String name, PartitionedLogObserver observer) { + + return view.observe(flow, name, wrapTransformed( + targetAttribute, observer)); + } + + }; + } + + private static LogObserver wrapTransformed( + AttributeProxyDescriptorImpl proxy, + LogObserver observer) { + + return new LogObserver() { + + @Override + public boolean onNext(StreamElement ingest, LogObserver.ConfirmCallback confirm) { + return observer.onNext( + transformToProxy(ingest, proxy), confirm); + } + + @Override + public boolean onNext( + StreamElement ingest, + Partition partition, + LogObserver.ConfirmCallback confirm) { + + return observer.onNext( + transformToProxy(ingest, proxy), + partition, confirm); + } + + @Override + public void onCompleted() { + observer.onCompleted(); + } + + @Override + public void onCancelled() { + observer.onCancelled(); + } + + @Override + public void onError(Throwable error) { + observer.onError(error); + } + + @Override + public void close() throws Exception { + observer.close(); + } + + }; + } + + static BulkLogObserver wrapTransformed(BulkLogObserver observer) { + return new BulkLogObserver() { + + @Override + public void onCompleted() { + observer.onCompleted(); + } + + @Override + public void onError(Throwable error) { + observer.onError(error); + } + + @Override + public boolean onNext( + StreamElement ingest, + Partition partition, + BulkLogObserver.BulkCommitter confirm) { + + return observer.onNext(ingest, partition, confirm); + } + + @Override + public void onRestart() { + observer.onRestart(); + } + + @Override + public void onCancelled() { + observer.onCancelled(); + } + + @Override + public void close() throws Exception { + observer.close(); + } + + }; + } + + + static BatchLogObserver wrapTransformed(BatchLogObserver observer) { + return new BatchLogObserver() { + + @Override + public boolean onNext( + StreamElement ingest, + Partition partition) { + + return observer.onNext(ingest, partition); + } + + @Override + public void onCompleted() { + observer.onCompleted(); + } + + @Override + public void onError(Throwable error) { + observer.onError(error); + } + + }; + } + + + private static PartitionedLogObserver wrapTransformed( + AttributeProxyDescriptorImpl target, PartitionedLogObserver observer) { + + return new PartitionedLogObserver() { + + @Override + public void onRepartition(Collection assigned) { + observer.onRepartition(assigned); + } + + @Override + public boolean onNext( + StreamElement ingest, + PartitionedLogObserver.ConfirmCallback confirm, + Partition partition, + PartitionedLogObserver.Consumer collector) { + + return observer.onNext(transformToProxy(ingest, target), + confirm, partition, collector); + } + + @Override + public void onCompleted() { + observer.onCompleted(); + } + + @Override + public void onError(Throwable error) { + observer.onError(error); + } + + }; + } + + private static StreamElement transformToRaw( + StreamElement data, + AttributeProxyDescriptorImpl targetDesc) { + + return transform(data, + targetDesc.getTarget(), + targetDesc.getTransform()::fromProxy); + } + + private static StreamElement transformToProxy( + StreamElement data, + AttributeProxyDescriptorImpl targetDesc) { + + return transform(data, targetDesc, targetDesc.getTransform()::toProxy); + } + + private static KeyValue transformToProxy( + KeyValue kv, + AttributeProxyDescriptorImpl targetDesc) { + + return KeyValue.of( + kv.getEntityDescriptor(), + targetDesc, kv.getKey(), + targetDesc.getTransform().toProxy(kv.getAttribute()), + kv.getOffset(), kv.getValueBytes()); + } + + private static StreamElement transform( + StreamElement data, + AttributeDescriptor target, + Function transform) { + + if (data.isDelete()) { + if (data.isDeleteWildcard()) { + return StreamElement.deleteWildcard( + data.getEntityDescriptor(), + target, data.getUuid(), data.getKey(), data.getStamp()); + } else { + return StreamElement.delete( + data.getEntityDescriptor(), target, + data.getUuid(), data.getKey(), + transform.apply(data.getAttribute()), + data.getStamp()); + } + } + return StreamElement.update(data.getEntityDescriptor(), + target, data.getUuid(), data.getKey(), + transform.apply(data.getAttribute()), + data.getStamp(), data.getValue()); + } + + + + +} diff --git a/core/src/main/java/cz/o2/proxima/repository/AttributeProxyDescriptorImpl.java b/core/src/main/java/cz/o2/proxima/repository/AttributeProxyDescriptorImpl.java new file mode 100644 index 000000000..115114106 --- /dev/null +++ b/core/src/main/java/cz/o2/proxima/repository/AttributeProxyDescriptorImpl.java @@ -0,0 +1,50 @@ +/** + * Copyright 2017 O2 Czech Republic, a.s. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cz.o2.proxima.repository; + +import lombok.Getter; + +/** + * Proxy to another attribute. + */ +class AttributeProxyDescriptorImpl + extends AttributeDescriptorBase { + + @Getter + private final AttributeDescriptorBase target; + + @Getter + private final ProxyTransform transform; + + AttributeProxyDescriptorImpl( + String name, + AttributeDescriptorBase target, + ProxyTransform transform) { + + super(name, target); + this.target = target; + this.transform = transform; + } + + @Override + public String toString() { + return "AttributeProxyDescriptorImpl(" + + "target=" + target + + ", name=" + name + + ")"; + } + +} diff --git a/core/src/main/java/cz/o2/proxima/repository/EntityDescriptor.java b/core/src/main/java/cz/o2/proxima/repository/EntityDescriptor.java index 3fbf84ef4..b51918265 100644 --- a/core/src/main/java/cz/o2/proxima/repository/EntityDescriptor.java +++ b/core/src/main/java/cz/o2/proxima/repository/EntityDescriptor.java @@ -36,9 +36,9 @@ class Builder { @Accessors(chain = true) private String name; - List attributes = new ArrayList<>(); + private final List> attributes = new ArrayList<>(); - public Builder addAttribute(AttributeDescriptor attr) { + public Builder addAttribute(AttributeDescriptorBase attr) { attributes.add(attr); return this; } @@ -46,6 +46,14 @@ public Builder addAttribute(AttributeDescriptor attr) { public EntityDescriptor build() { return new EntityDescriptorImpl(name, Collections.unmodifiableList(attributes)); } + + AttributeDescriptorBase findAttribute(String attr) { + return attributes.stream().filter(a -> a.getName() + .equals(attr)).findAny() + .orElseThrow(() -> new IllegalArgumentException( + "Cannot find attribute " + attr + " of entity " + this.name)); + } + } static Builder newBuilder() { @@ -56,10 +64,37 @@ static Builder newBuilder() { /** Name of the entity. */ String getName(); - /** Find attribute based by name. */ - Optional> findAttribute(String name); + /** + * Find attribute by name. + * @param name name of the attribute to search for + * @param includeProtected {@code true} to allow search for protected fields (prefixed by _). + * @return optional found attribute descriptor + */ + Optional> findAttribute(String name, boolean includeProtected); - /** List all attribute descriptors of given entity. */ - List getAllAttributes(); + /** + * Find attribute by name. + * Do not search protected fields (prefixed by _). + * @param name name of the attribute to search for + * @return optional found attribute descriptor + */ + default Optional> findAttribute(String name) { + return findAttribute(name, false); + } + + /** + * Find all attributes of this entity. + * @param includeProtected when {@code true} then protected attributes are + * also included (prefixed by _). + * @return + */ + List> getAllAttributes(boolean includeProtected); + + /** + * List all attribute descriptors of given entity. + */ + default List> getAllAttributes() { + return getAllAttributes(false); + } } diff --git a/core/src/main/java/cz/o2/proxima/repository/EntityDescriptorImpl.java b/core/src/main/java/cz/o2/proxima/repository/EntityDescriptorImpl.java index 31cf5af22..1ced96679 100644 --- a/core/src/main/java/cz/o2/proxima/repository/EntityDescriptorImpl.java +++ b/core/src/main/java/cz/o2/proxima/repository/EntityDescriptorImpl.java @@ -37,19 +37,19 @@ public class EntityDescriptorImpl implements EntityDescriptor { private final String name; /** List of all attribute descriptors. */ - private final List attributes; + private final List> attributes; /** Map of attributes by name. */ - private final Map attributesByName; + private final Map> attributesByName; /** Map of attributes by pattern. */ - private final Map attributesByPattern; + private final Map> attributesByPattern; - EntityDescriptorImpl(String name, List attrs) { + EntityDescriptorImpl(String name, List> attrs) { this.name = Objects.requireNonNull(name); this.attributes = Collections.unmodifiableList(Objects.requireNonNull(attrs)); - List fullyQualified = attrs.stream() + List> fullyQualified = attrs.stream() .filter(a -> !a.isWildcard()) .collect(Collectors.toList()); @@ -65,24 +65,34 @@ public class EntityDescriptorImpl implements EntityDescriptor { /** Find attribute based by name. */ @Override - public Optional> findAttribute(String name) { - AttributeDescriptor byName = attributesByName.get(name); - if (byName != null) { - return Optional.of(byName); - } - for (Map.Entry e : attributesByPattern.entrySet()) { - if (e.getKey().matches(name)) { - return Optional.of(e.getValue()); + public Optional> findAttribute( + String name, boolean includeProtected) { + + AttributeDescriptor found = attributesByName.get(name); + if (found == null) { + for (Map.Entry> e : attributesByPattern.entrySet()) { + if (e.getKey().matches(name)) { + found = e.getValue(); + break; + } } } + if (found != null && (includeProtected || found.isPublic())) { + return Optional.of(found); + } return Optional.empty(); } /** List all attribute descriptors of given entity. */ @Override - public List getAllAttributes() { - return attributes; + public List> getAllAttributes(boolean includeProtected) { + if (includeProtected) { + return Collections.unmodifiableList(attributes); + } + return attributes.stream() + .filter(a -> a.isPublic()) + .collect(Collectors.toList()); } @Override diff --git a/core/src/main/java/cz/o2/proxima/repository/ProxyTransform.java b/core/src/main/java/cz/o2/proxima/repository/ProxyTransform.java new file mode 100644 index 000000000..256d533a7 --- /dev/null +++ b/core/src/main/java/cz/o2/proxima/repository/ProxyTransform.java @@ -0,0 +1,39 @@ +/** + * Copyright 2017 O2 Czech Republic, a.s. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cz.o2.proxima.repository; + +import java.io.Serializable; + +/** + * A transformation of attribute name applied both on reading and writing attribute. + */ +public interface ProxyTransform extends Serializable { + + /** + * Apply transformation to attribute name from proxy naming. + * @param proxy name of the attribute in proxy namespace + * @return the raw attribute + */ + String fromProxy(String proxy); + + /** + * Apply transformation to attribute name to proxy naming. + * @param raw the raw attribute name + * @return the proxy attribute name + */ + String toProxy(String raw); + +} diff --git a/core/src/main/java/cz/o2/proxima/repository/Repository.java b/core/src/main/java/cz/o2/proxima/repository/Repository.java index fb9ee0504..af311a916 100644 --- a/core/src/main/java/cz/o2/proxima/repository/Repository.java +++ b/core/src/main/java/cz/o2/proxima/repository/Repository.java @@ -200,7 +200,7 @@ public Repository build() { * This need not be synchronized because it is only written in constructor * and then it is read-only. */ - private final Map, Set>> attributeToFamily; + private final Map, Set> attributeToFamily; /** @@ -255,10 +255,20 @@ private Repository( readEntityDescriptors(cfg); if (loadFamilies) { + /* Read attribute families and map them to storages by attribute. */ readAttributeFamilies(cfg); - /* Read transformations from one entity to another. */ - readTransformations(cfg); + + if (shouldLoadAccessors) { + /* Link attribute families for proxied attribute. */ + loadProxiedFamilies(cfg); + + /* Read transformations from one entity to another. */ + readTransformations(cfg); + + linkAttributesToWriters(); + } + } if (shouldValidate) { @@ -266,7 +276,7 @@ private Repository( validate(); } - } catch (URISyntaxException ex) { + } catch (Exception ex) { throw new IllegalArgumentException("Cannot read config settings", ex); } @@ -336,7 +346,7 @@ private void readSchemeSerializers( } /** Read descriptors of entites from config */ - private void readEntityDescriptors(Config cfg) throws URISyntaxException { + private void readEntityDescriptors(Config cfg) throws Exception { ConfigValue entities = cfg.root().get("entities"); if (entities == null) { LOG.warn("Empty configuration of entities, skipping initialization"); @@ -350,40 +360,25 @@ private void readEntityDescriptors(Config cfg) throws URISyntaxException { toMap("entities." + entityName, e.getValue()).get("attributes")); EntityDescriptor.Builder entity = EntityDescriptor.newBuilder() .setName(entityName); - for (Map.Entry attr : entityAttrs.entrySet()) { + // first regular attributes + entityAttrs.forEach((key, value) -> { Map settings = toMap( - "entities." + entityName + ".attributes." + attr.getKey(), attr .getValue()); - - Object scheme = Objects.requireNonNull( - settings.get("scheme"), - "Missing key entities." + entityName + ".attributes." - + attr.getKey() + ".scheme"); - - String schemeStr = scheme.toString(); - if (schemeStr.indexOf(':') == -1) { - // if the scheme does not contain `:' the java.net.URI cannot parse it - // we will fix this by adding `:///' - schemeStr += ":///"; + "entities." + entityName + ".attributes." + key, value); + if (settings.get("proxy") == null) { + loadRegular(entityName, key, settings, entity); } - URI schemeURI = new URI(schemeStr); - // validate that the scheme serializer doesn't throw exceptions - // ignore the return value - try { - if (shouldValidate) { - getValueSerializerFactory(schemeURI.getScheme()) - .getValueSerializer(schemeURI) - .isValid(new byte[] { }); - } - } catch (Exception ex) { - throw new IllegalStateException("Cannot use serializer for URI " + schemeURI, ex); + }); + + // next proxies + entityAttrs.forEach((key, value) -> { + Map settings = toMap( + "entities." + entityName + ".attributes." + key, value); + if (settings.get("proxy") != null) { + loadProxy(key, settings, entity); } - entity.addAttribute(AttributeDescriptor.newBuilder(this) - .setEntity(entityName) - .setName(attr.getKey()) - .setSchemeURI(schemeURI) - .build()); - } + }); + if (!entityName.contains("*")) { LOG.info("Adding entity by fully qualified name {}", entityName); entitiesByName.put(entityName, entity.build()); @@ -395,6 +390,81 @@ private void readEntityDescriptors(Config cfg) throws URISyntaxException { } } + @SuppressWarnings("unchecked") + private void loadProxy( + String attrName, + Map settings, + EntityDescriptor.Builder entityBuilder) { + + AttributeDescriptorBase target = Optional.ofNullable(settings.get("proxy")) + .map(Object::toString) + .map(proxy -> entityBuilder.findAttribute(proxy)) + .orElseThrow(() -> new IllegalStateException( + "Invalid state: `proxy` should not be null")); + + final ProxyTransform transform; + if (this.shouldLoadAccessors) { + transform = Optional.ofNullable(settings.get("apply")) + .map(Object::toString) + .map(s -> { + try { + Class c = Classpath.findClass(s, ProxyTransform.class); + return c.newInstance(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + }) + .orElseThrow(() -> new IllegalArgumentException("Missing required field `apply'")); + } else { + transform = null; + } + + entityBuilder.addAttribute( + AttributeDescriptor.newProxy(attrName, target, transform)); + } + + + private void loadRegular( + String entityName, + String attrName, + Map settings, + EntityDescriptor.Builder entityBuilder) { + + try { + + Object scheme = Objects.requireNonNull( + settings.get("scheme"), + "Missing key entities." + entityName + ".attributes." + + attrName + ".scheme"); + + String schemeStr = scheme.toString(); + if (schemeStr.indexOf(':') == -1) { + // if the scheme does not contain `:' the java.net.URI cannot parse it + // we will fix this by adding `:///' + schemeStr += ":///"; + } + URI schemeURI = new URI(schemeStr); + // validate that the scheme serializer doesn't throw exceptions + // ignore the return value + try { + if (shouldValidate) { + getValueSerializerFactory(schemeURI.getScheme()) + .getValueSerializer(schemeURI) + .isValid(new byte[] { }); + } + } catch (Exception ex) { + throw new IllegalStateException("Cannot use serializer for URI " + schemeURI, ex); + } + entityBuilder.addAttribute(AttributeDescriptor.newBuilder(this) + .setEntity(entityName) + .setName(attrName) + .setSchemeURI(schemeURI) + .build()); + } catch (URISyntaxException ex) { + throw new RuntimeException(ex); + } + } + @SuppressWarnings("unchecked") private Map toMap(String key, Object value) { if (!(value instanceof Map)) { @@ -518,17 +588,18 @@ private void readAttributeFamilies(Config cfg) { family.setFilter(newInstance(filter, StorageFilter.class)); } - Collection> allAttributes = new HashSet<>(); + Collection> allAttributes = new HashSet<>(); for (String attr : attributes) { // attribute descriptors affected by this settings - final List> attrDescs; + final List> attrDescs; if (attr.equals("*")) { // this means all attributes of entity - attrDescs = (List) entDesc.getAllAttributes(); + attrDescs = (List) entDesc.getAllAttributes(true); } else { - attrDescs = (List) Arrays.asList(entDesc.findAttribute(attr).orElseThrow( - () -> new IllegalArgumentException("Cannot find attribute " + attr))); + attrDescs = (List) Arrays.asList(entDesc.findAttribute(attr, true) + .orElseThrow( + () -> new IllegalArgumentException("Cannot find attribute " + attr))); } allAttributes.addAll(attrDescs); } @@ -536,7 +607,7 @@ private void readAttributeFamilies(Config cfg) { allAttributes.forEach(family::addAttribute); final AttributeFamilyDescriptor familyBuilt = family.build(); allAttributes.forEach(a -> { - Set> families = attributeToFamily + Set families = attributeToFamily .computeIfAbsent(a, k -> new HashSet<>()); if (!families.add(familyBuilt)) { throw new IllegalArgumentException( @@ -553,29 +624,44 @@ private void readAttributeFamilies(Config cfg) { } - if (shouldLoadAccessors) { - // iterate over all attribute families and setup appropriate (commit) writers - // for all attributes - attributeToFamily.forEach((key, value) -> { - Optional writer = value - .stream() - .filter(af -> af.getType() == StorageType.PRIMARY) - .filter(af -> !af.getAccess().isReadonly()) - .filter(af -> af.getWriter().isPresent()) - .findAny() - .map(af -> af.getWriter() - .orElseThrow(() -> new NoSuchElementException("Writer can not be empty"))); - - if (writer.isPresent()) { - key.setWriter(writer.get().online()); - } else { - LOG.info( - "No writer found for attribute {}, continuing, but assuming " - + "the attribute is read-only. Any attempt to write it will fail.", - key); - } - }); - } + } + + private void linkAttributesToWriters() { + // iterate over all attribute families and setup appropriate (commit) writers + // for all attributes + attributeToFamily.forEach((key, value) -> { + Optional writer = value + .stream() + .filter(af -> af.getType() == StorageType.PRIMARY) + .filter(af -> !af.getAccess().isReadonly()) + .filter(af -> af.getWriter().isPresent()) + .findAny() + .map(af -> af.getWriter() + .orElseThrow(() -> new NoSuchElementException("Writer can not be empty"))); + + if (writer.isPresent()) { + ((AttributeDescriptorBase) key).setWriter(writer.get().online()); + } else { + LOG.info( + "No writer found for attribute {}, continuing, but assuming " + + "the attribute is read-only. Any attempt to write it will fail.", + key); + } + }); + } + + private void loadProxiedFamilies(Config cfg) { + getAllEntities() + .flatMap(e -> e.getAllAttributes(true).stream()) + .filter(a -> ((AttributeDescriptorBase) a).isProxy()) + .forEach(a -> { + AttributeProxyDescriptorImpl p = (AttributeProxyDescriptorImpl) a; + AttributeDescriptorBase target = p.getTarget(); + attributeToFamily.put(p, getFamiliesForAttribute(target) + .stream() + .map(af -> new AttributeFamilyProxyDescriptor(p, af)) + .collect(Collectors.toSet())); + }); } private void readTransformations(Config cfg) { @@ -607,7 +693,7 @@ private void readTransformations(Config cfg) { List> attrs = readList("attributes", transformation, k) .stream() - .map(a -> entity.findAttribute(a).orElseThrow( + .map(a -> entity.findAttribute(a, true).orElseThrow( () -> new IllegalArgumentException( String.format("Missing attribute `%s` in `%s`", a, entity)))) @@ -676,9 +762,10 @@ private void validate() { Stream.concat( entitiesByName.values().stream(), entitiesByPattern.values().stream()) - .flatMap(d -> d.getAllAttributes().stream()) + .flatMap(d -> d.getAllAttributes(true).stream()) + .filter(a -> !((AttributeDescriptorBase) a).isProxy()) .filter(a -> { - Set> families = attributeToFamily.get(a); + Set families = attributeToFamily.get(a); return families == null || families.isEmpty(); }) .findAny() @@ -700,16 +787,17 @@ public StorageDescriptor getStorageDescriptor(String scheme) { /** List all unique atttribute families. */ - public Stream> getAllFamilies() { + public Stream getAllFamilies() { return attributeToFamily.values().stream() .flatMap(Collection::stream).distinct(); } /** Retrieve list of attribute families for attribute. */ - public Set> getFamiliesForAttribute( + public Set getFamiliesForAttribute( AttributeDescriptor attr) { - return Objects.requireNonNull(attributeToFamily.get(attr), + return Objects.requireNonNull( + attributeToFamily.get(attr), "Cannot find any family for attribute " + attr); } diff --git a/core/src/main/java/cz/o2/proxima/storage/AccessType.java b/core/src/main/java/cz/o2/proxima/storage/AccessType.java index ab1aaf3f1..6a0372121 100644 --- a/core/src/main/java/cz/o2/proxima/storage/AccessType.java +++ b/core/src/main/java/cz/o2/proxima/storage/AccessType.java @@ -115,6 +115,56 @@ public String toString() { } + static AccessType or(AccessType left, AccessType right) { + return new AccessType() { + @Override + public boolean canReadBatchUpdates() { + return left.canReadBatchUpdates() || right.canReadBatchUpdates(); + } + + @Override + public boolean canReadBatchSnapshot() { + return left.canReadBatchSnapshot() || right.canReadBatchSnapshot(); + } + + @Override + public boolean canRandomRead() { + return left.canRandomRead() || right.canRandomRead(); + } + + @Override + public boolean canReadCommitLog() { + return left.canReadCommitLog() || right.canReadCommitLog(); + } + + @Override + public boolean isStateCommitLog() { + return left.isStateCommitLog() || right.isStateCommitLog(); + } + + @Override + public boolean isReadonly() { + return left.isReadonly() || right.isReadonly(); + } + + @Override + public boolean isListPrimaryKey() { + return left.isListPrimaryKey() || right.isListPrimaryKey(); + } + + @Override + public boolean isWriteOnly() { + return left.isWriteOnly() || right.isWriteOnly(); + } + + @Override + public boolean canCreatePartitionedView() { + return left.canCreatePartitionedView() || right.canCreatePartitionedView(); + } + + }; + } + /** * @return {@code true} if this family can be used to access data by batch * observing of updates. diff --git a/core/src/test/java/cz/o2/proxima/repository/PartitionedViewTest.java b/core/src/test/java/cz/o2/proxima/repository/PartitionedViewTest.java index e3278b001..6a8cc0924 100644 --- a/core/src/test/java/cz/o2/proxima/repository/PartitionedViewTest.java +++ b/core/src/test/java/cz/o2/proxima/repository/PartitionedViewTest.java @@ -52,7 +52,7 @@ public class PartitionedViewTest implements Serializable { @Before public void setUp() { executor = new InMemExecutor(); - AttributeFamilyDescriptor family = repo.getAllFamilies() + AttributeFamilyDescriptor family = repo.getAllFamilies() .filter(af -> af.getName().equals("event-storage-stream")) .findAny() .get(); diff --git a/core/src/test/java/cz/o2/proxima/repository/RepositoryTest.java b/core/src/test/java/cz/o2/proxima/repository/RepositoryTest.java index 5ee2afb5d..c743b8d22 100644 --- a/core/src/test/java/cz/o2/proxima/repository/RepositoryTest.java +++ b/core/src/test/java/cz/o2/proxima/repository/RepositoryTest.java @@ -17,9 +17,17 @@ package cz.o2.proxima.repository; import com.typesafe.config.ConfigFactory; +import cz.o2.proxima.storage.StreamElement; +import cz.o2.proxima.storage.commitlog.LogObserver; +import cz.o2.proxima.storage.randomaccess.KeyValue; import java.io.IOException; -import org.junit.After; -import org.junit.Before; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.CountDownLatch; +import java.util.stream.Collectors; import org.junit.Test; import static org.junit.Assert.*; @@ -28,15 +36,6 @@ */ public class RepositoryTest { - - @Before - public void setup() { - } - - @After - public void teardown() { - } - @Test public void testConfigParsing() throws IOException { Repository repo = Repository.Builder.of(ConfigFactory.load().resolve()).build(); @@ -61,4 +60,145 @@ public void testConfigParsing() throws IOException { gateway.findAttribute("bytes").get().getSchemeURI().toString()); } + @Test(timeout = 2000) + public void testProxyWrite() throws UnsupportedEncodingException, InterruptedException { + Repository repo = Repository.Builder.of(ConfigFactory.load().resolve()).build(); + EntityDescriptor proxied = repo.findEntity("proxied").get(); + AttributeDescriptor target = proxied.findAttribute("_e.*", true).get(); + AttributeDescriptor source = proxied.findAttribute("event.*").get(); + Set families = repo + .getFamiliesForAttribute(target); + Set proxiedFamilies = repo + .getFamiliesForAttribute(source); + assertEquals( + families.stream() + .map(a -> "proxy::event.*::" + a.getName()) + .collect(Collectors.toList()), + proxiedFamilies.stream() + .map(a -> a.getName()) + .collect(Collectors.toList())); + + // verify that writing to attribute event.abc ends up as _e.abc + CountDownLatch latch = new CountDownLatch(2); + proxiedFamilies.iterator().next().getCommitLogReader().get().observe("dummy", new LogObserver() { + + @Override + public boolean onNext(StreamElement ingest, LogObserver.ConfirmCallback confirm) { + assertEquals("test", new String(ingest.getValue())); + assertEquals("event.abc", ingest.getAttribute()); + assertEquals(source, ingest.getAttributeDescriptor()); + latch.countDown(); + return false; + } + + @Override + public void onError(Throwable error) { + throw new RuntimeException(error); + } + + @Override + public void close() throws Exception { + // nop + } + + }); + + source.getWriter().write(StreamElement.update( + proxied, + source, UUID.randomUUID().toString(), + "key", "event.abc", System.currentTimeMillis(), "test".getBytes("UTF-8")), + (s, exc) -> { + latch.countDown(); + }); + + latch.await(); + + KeyValue kv = families.iterator().next() + .getRandomAccessReader().get().get("key", "_e.abc", target) + .orElseGet(() -> { + fail("Missing _e.abc stored"); + return null; + }); + + assertEquals("test", new String((byte[]) kv.getValue())); + + } + + @Test + public void testProxyRandomGet() throws UnsupportedEncodingException, InterruptedException { + Repository repo = Repository.Builder.of(ConfigFactory.load().resolve()).build(); + EntityDescriptor proxied = repo.findEntity("proxied").get(); + AttributeDescriptor target = proxied.findAttribute("_e.*", true).get(); + AttributeDescriptor source = proxied.findAttribute("event.*").get(); + Set proxiedFamilies = repo + .getFamiliesForAttribute(source); + + // verify that writing to attribute event.abc ends up as _e.abc + source.getWriter().write(StreamElement.update( + proxied, + source, UUID.randomUUID().toString(), + "key", "event.abc", System.currentTimeMillis(), "test".getBytes("UTF-8")), + (s, exc) -> { + assertTrue(s); + }); + + KeyValue kv = proxiedFamilies.iterator().next() + .getRandomAccessReader().get().get("key", "event.abc", target) + .orElseGet(() -> { + fail("Missing event.abc stored"); + return null; + }); + + assertEquals("test", new String((byte[]) kv.getValue())); + assertEquals(source, kv.getAttrDescriptor()); + assertEquals("event.abc", kv.getAttribute()); + assertEquals("key", kv.getKey()); + + } + + @Test + public void testProxyScan() throws UnsupportedEncodingException, InterruptedException { + Repository repo = Repository.Builder.of(ConfigFactory.load().resolve()).build(); + EntityDescriptor proxied = repo.findEntity("proxied").get(); + AttributeDescriptor target = proxied.findAttribute("_e.*", true).get(); + AttributeDescriptor source = proxied.findAttribute("event.*").get(); + Set proxiedFamilies = repo + .getFamiliesForAttribute(source); + + // verify that writing to attribute event.abc ends up as _e.abc + source.getWriter().write(StreamElement.update( + proxied, + source, UUID.randomUUID().toString(), + "key", "event.abc", System.currentTimeMillis(), "test".getBytes("UTF-8")), + (s, exc) -> { + assertTrue(s); + }); + + source.getWriter().write(StreamElement.update( + proxied, + source, UUID.randomUUID().toString(), + "key", "event.def", System.currentTimeMillis(), "test2".getBytes("UTF-8")), + (s, exc) -> { + assertTrue(s); + }); + + + List> kvs = new ArrayList<>(); + proxiedFamilies.iterator().next() + .getRandomAccessReader().get().scanWildcard("key", source, kvs::add); + + assertEquals("test", new String((byte[]) kvs.get(0).getValue())); + assertEquals(source, kvs.get(0).getAttrDescriptor()); + assertEquals("event.abc", kvs.get(0).getAttribute()); + assertEquals("key", kvs.get(0).getKey()); + + assertEquals("test2", new String((byte[]) kvs.get(1).getValue())); + assertEquals(source, kvs.get(1).getAttrDescriptor()); + assertEquals("event.def", kvs.get(1).getAttribute()); + assertEquals("key", kvs.get(1).getKey()); + + } + + + } diff --git a/core/src/test/java/cz/o2/proxima/transform/EventTransform.java b/core/src/test/java/cz/o2/proxima/transform/EventTransform.java new file mode 100644 index 000000000..71243880e --- /dev/null +++ b/core/src/test/java/cz/o2/proxima/transform/EventTransform.java @@ -0,0 +1,37 @@ +/** + * Copyright 2017 O2 Czech Republic, a.s. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cz.o2.proxima.transform; + +import cz.o2.proxima.repository.ProxyTransform; + +/** + * Transformation from proxy space (event.*) to raw space (_e.*). + */ +public class EventTransform implements ProxyTransform { + + @Override + public String fromProxy(String proxy) { + int pos = proxy.indexOf('.'); + return "_e." + proxy.substring(pos + 1); + } + + @Override + public String toProxy(String raw) { + int pos = raw.indexOf('.'); + return "event." + raw.substring(pos + 1); + } + +} diff --git a/core/src/test/resources/reference.conf b/core/src/test/resources/reference.conf index 3adc8daae..236e5259b 100644 --- a/core/src/test/resources/reference.conf +++ b/core/src/test/resources/reference.conf @@ -10,16 +10,16 @@ # this entity represents state of the gateway gateway: { attributes: { - armed: { scheme: "bytes" } - users: { scheme: "bytes" } - status: { scheme: "bytes" } + armed: { scheme: bytes } + users: { scheme: bytes } + status: { scheme: bytes } # the following defines a pattern for attributes # each attribute that matches the pattern is treated the same - "device.*": { scheme: "bytes" } + "device.*": { scheme: bytes } # settings for specific rule - "rule.*": { scheme: "bytes" } + "rule.*": { scheme: bytes } # this is fake attribute that always fails validation fail: { scheme: "fail:whenever" } @@ -31,10 +31,25 @@ dummy: { attributes: { data: { scheme: bytes } - "wildcard.*": { scheme: "bytes" } + "wildcard.*": { scheme: "bytes" } } } + proxied { + + attributes { + # this is "protected" field and should not be accessed directly + "_e.*": { scheme: bytes } + + # this is proxy public attribute performing transformation + "event.*": { + proxy: "_e.*" + apply: cz.o2.proxima.transform.EventTransform + } + } + + } + } attributeFamilies: { @@ -74,6 +89,14 @@ type: primary access: "commit-log, random-access" } + + proxy-primary { + entity: proxied + attributes: [ "_e.*" ] + storage: "inmem:///proxima/proxy" + type: primary + access: "commit-log, random-access" + } } transformations { diff --git a/kafka/src/test/java/cz/o2/proxima/storage/kafka/LocalKafkaCommitLogDescriptorTest.java b/kafka/src/test/java/cz/o2/proxima/storage/kafka/LocalKafkaCommitLogDescriptorTest.java index 436eb1b15..3b43690f5 100644 --- a/kafka/src/test/java/cz/o2/proxima/storage/kafka/LocalKafkaCommitLogDescriptorTest.java +++ b/kafka/src/test/java/cz/o2/proxima/storage/kafka/LocalKafkaCommitLogDescriptorTest.java @@ -18,6 +18,7 @@ import com.typesafe.config.ConfigFactory; import cz.o2.proxima.repository.AttributeDescriptor; +import cz.o2.proxima.repository.AttributeDescriptorBase; import cz.o2.proxima.repository.EntityDescriptor; import cz.o2.proxima.repository.Repository; import cz.o2.proxima.storage.Partition; @@ -45,7 +46,7 @@ public class LocalKafkaCommitLogDescriptorTest { final Repository repo = Repository.Builder.ofTest(ConfigFactory.empty()).build(); - final AttributeDescriptor attr; + final AttributeDescriptorBase attr; final EntityDescriptor entity; final URI storageURI; diff --git a/maven/src/main/resources/java-source.ftlh b/maven/src/main/resources/java-source.ftlh index 0588db841..d5d371814 100644 --- a/maven/src/main/resources/java-source.ftlh +++ b/maven/src/main/resources/java-source.ftlh @@ -97,9 +97,9 @@ public class ${java_classname} { <#-- entity.attributes as attribute --> public Optional getCommitLog(AttributeDescriptor... attributes) { - Set> descriptors = new HashSet<>(); + Set descriptors = new HashSet<>(); for (AttributeDescriptor attr : attributes) { - Set> commitLogs = repo.getFamiliesForAttribute(attr) + Set commitLogs = repo.getFamiliesForAttribute(attr) .stream() .filter(af -> af.getCommitLogReader().isPresent()) .collect(Collectors.toSet()); @@ -118,9 +118,9 @@ public class ${java_classname} { public Optional getPartitionedView(AttributeDescriptor... attributes) { - Set> descriptors = new HashSet<>(); + Set descriptors = new HashSet<>(); for (AttributeDescriptor attr : attributes) { - Set> views = repo.getFamiliesForAttribute(attr) + Set views = repo.getFamiliesForAttribute(attr) .stream() .filter(af -> af.getAccess().canCreatePartitionedView()) .collect(Collectors.toSet()); diff --git a/server/src/main/java/cz/o2/proxima/server/IngestServer.java b/server/src/main/java/cz/o2/proxima/server/IngestServer.java index a3d9e04b6..67a3494ed 100644 --- a/server/src/main/java/cz/o2/proxima/server/IngestServer.java +++ b/server/src/main/java/cz/o2/proxima/server/IngestServer.java @@ -651,14 +651,13 @@ public void run() { protected void startConsumerThreads() throws InterruptedException { // index the repository - Map, Set>> familyToCommitLog; + Map> familyToCommitLog; familyToCommitLog = indexFamilyToCommitLogs(); LOG.info("Starting consumer threads for familyToCommitLog {}", familyToCommitLog); // execute threads to consume the commit log - familyToCommitLog.entrySet().stream().forEach(entry -> { - AttributeFamilyDescriptor family = entry.getKey(); - for (AttributeFamilyDescriptor commitLogFamily : entry.getValue()) { + familyToCommitLog.forEach((family, logs) -> { + for (AttributeFamilyDescriptor commitLogFamily : logs) { CommitLogReader commitLog = commitLogFamily.getCommitLogReader() .orElseThrow(() -> new IllegalStateException( "Failed validation on consistency of attribute families. Fix code!")); @@ -689,7 +688,7 @@ protected void startConsumerThreads() throws InterruptedException { } private void runTransformer(String name, TransformationDescriptor transform) { - AttributeFamilyDescriptor family = transform.getAttributes() + AttributeFamilyDescriptor family = transform.getAttributes() .stream() .map(a -> this.repo.getFamiliesForAttribute(a) .stream().filter(af -> af.getAccess().canReadCommitLog()) @@ -768,7 +767,7 @@ public boolean onNextInternal( * themselves. */ @SuppressWarnings("unchecked") - private Map, Set>> + private Map> indexFamilyToCommitLogs() { // each attribute and its associated primary family diff --git a/server/src/test/java/cz/o2/proxima/server/IngestServiceTest.java b/server/src/test/java/cz/o2/proxima/server/IngestServiceTest.java index 5b5a04a27..a3211c838 100644 --- a/server/src/test/java/cz/o2/proxima/server/IngestServiceTest.java +++ b/server/src/test/java/cz/o2/proxima/server/IngestServiceTest.java @@ -20,7 +20,6 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.typesafe.config.ConfigFactory; import cz.o2.proxima.proto.service.Rpc; -import cz.o2.proxima.server.IngestServer; import cz.o2.proxima.server.test.Test.ExtendedMessage; import cz.o2.proxima.storage.InMemBulkStorage; import cz.o2.proxima.storage.InMemStorage; diff --git a/tools/hs_err_pid3559.log b/tools/hs_err_pid3559.log new file mode 100644 index 000000000..a367aff56 --- /dev/null +++ b/tools/hs_err_pid3559.log @@ -0,0 +1,993 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x00007faee8e5fc36, pid=3559, tid=0x00007faee9918700 +# +# JRE version: Java(TM) SE Runtime Environment (8.0_151-b12) (build 1.8.0_151-b12) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode linux-amd64 compressed oops) +# Problematic frame: +# C [libc.so.6+0x14dc36] +# +# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again +# +# If you would like to submit a bug report, please visit: +# http://bugreport.java.com/bugreport/crash.jsp +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + +--------------- T H R E A D --------------- + +Current thread (0x00007faee000d000): JavaThread "main" [_thread_in_native, id=3560, stack(0x00007faee9818000,0x00007faee9919000)] + +siginfo: si_signo: 11 (SIGSEGV), si_code: 2 (SEGV_ACCERR), si_addr: 0x00007faec8ca7000 + +Registers: +RAX=0x00007faee0d95830, RBX=0x0000000000005073, RCX=0x0000000000000d78, RDX=0x0000000000005073 +RSP=0x00007faee9916098, RBP=0x00007faee99160f0, RSI=0x00007faec8ca7000, RDI=0x00007faee0d99b2b +R8 =0x00007faee0000378, R9 =0x000000006c697542, R10=0x00007faee0000078, R11=0x00007faee0000078 +R12=0x00007faec8c94d13, R13=0x00007faee0da0570, R14=0x0000000000007361, R15=0x00007faee0a7e7b0 +RIP=0x00007faee8e5fc36, EFLAGS=0x0000000000010283, CSGSFS=0x002b000000000033, ERR=0x0000000000000004 + TRAPNO=0x000000000000000e + +Top of Stack: (sp=0x00007faee9916098) +0x00007faee9916098: 00007faee698576e 00000000f781c220 +0x00007faee99160a8: 507361ae00000000 0000000000006c63 +0x00007faee99160b8: 00000000f3000808 00007faee0da0570 +0x00007faee99160c8: 00007faee0a89680 00007faee0da17a0 +0x00007faee99160d8: 00007faee0a7e7b0 000000003b893dc5 +0x00007faee99160e8: 0000000000000044 00007faee9916150 +0x00007faee99160f8: 00007faee6985c7f 00007faee000d000 +0x00007faee9916108: 01007faee84104b0 00007faee9916170 +0x00007faee9916118: 00007faee99161b5 00007faee99161b3 +0x00007faee9916128: 00007faee9916170 0000000000000044 +0x00007faee9916138: 00007faee000d1f8 00007faee99165c8 +0x00007faee9916148: 0000000000000001 00007faee99165b0 +0x00007faee9916158: 00007faee6976ec0 0000000000000009 +0x00007faee9916168: 00007faee0a7e7b0 616e7a65732f7a63 +0x00007faee9916178: 726f687075652f6d 2f65726f632f6169 +0x00007faee9916188: 6f2f746e65696c63 2f726f7461726570 +0x00007faee9916198: 736241246e696f4a 696f4a7463617274 +0x00007faee99161a8: 632e65746174536e 000000007373616c +0x00007faee99161b8: 00007faee4355750 00000000fd475140 +0x00007faee99161c8: 00007faed1710a24 0000000000000000 +0x00007faee99161d8: 00007faed15e7b7f 00007faee43ae3d8 +0x00007faee99161e8: 00007faee000d000 00007faee43ae3d8 +0x00007faee99161f8: 00007faee000d000 00007faee9916cc8 +0x00007faee9916208: 00007faee43ae3d8 00007faee43ae3d8 +0x00007faee9916218: 00007faee43ae3d8 00007faee000d000 +0x00007faee9916228: 0000000000000000 00007faee000d000 +0x00007faee9916238: 00007faee0092480 00007faee0084598 +0x00007faee9916248: 00007faee0084598 00007faee9916410 +0x00007faee9916258: 00007faee83f719c 00007faee000d000 +0x00007faee9916268: 00000000f7819060 00000000f781ba78 +0x00007faee9916278: 00007faee0084590 00007faee8c81390 +0x00007faee9916288: 00007faee4355750 00000000f7819268 + +Instructions: (pc=0x00007faee8e5fc36) +0x00007faee8e5fc16: c0 c3 0f 1f 84 00 00 00 00 00 48 8b 0d b1 65 27 +0x00007faee8e5fc26: 00 48 c1 e1 03 48 39 ca 73 10 48 89 d1 48 89 d1 +0x00007faee8e5fc36: f3 a4 c3 0f 1f 80 00 00 00 00 48 8d 0c 16 c5 fe +0x00007faee8e5fc46: 6f 26 c5 fa 6f 6c 16 80 c5 fa 6f 71 90 c5 fa 6f + +Register to memory mapping: + +RAX=0x00007faee0d95830 is an unknown value +RBX=0x0000000000005073 is an unknown value +RCX=0x0000000000000d78 is an unknown value +RDX=0x0000000000005073 is an unknown value +RSP=0x00007faee9916098 is pointing into the stack for thread: 0x00007faee000d000 +RBP=0x00007faee99160f0 is pointing into the stack for thread: 0x00007faee000d000 +RSI=0x00007faec8ca7000 is an unknown value +RDI=0x00007faee0d99b2b is an unknown value +R8 =0x00007faee0000378 is an unknown value +R9 =0x000000006c697542 is an unknown value +R10=0x00007faee0000078 is an unknown value +R11=0x00007faee0000078 is an unknown value +R12=0x00007faec8c94d13 is an unknown value +R13=0x00007faee0da0570 is an unknown value +R14=0x0000000000007361 is an unknown value +R15=0x00007faee0a7e7b0 is an unknown value + + +Stack: [0x00007faee9818000,0x00007faee9919000], sp=0x00007faee9916098, free space=1016k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libc.so.6+0x14dc36] +C [libzip.so+0x12c7f] ZIP_GetEntry2+0xff +C [libzip.so+0x3ec0] Java_java_util_zip_ZipFile_getEntry+0xf0 +J 164 java.util.zip.ZipFile.getEntry(J[BZ)J (0 bytes) @ 0x00007faed116a88e [0x00007faed116a7c0+0xce] +J 1586 C2 java.util.zip.ZipFile.getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry; (101 bytes) @ 0x00007faed15bf8a8 [0x00007faed15bf540+0x368] +J 1712 C2 edu.umd.cs.findbugs.classfile.impl.ZipFileCodeBase.lookupResource(Ljava/lang/String;)Ledu/umd/cs/findbugs/classfile/ICodeBaseEntry; (34 bytes) @ 0x00007faed16131f0 [0x00007faed1613040+0x1b0] +J 1675 C1 edu.umd.cs.findbugs.classfile.impl.ClassPathImpl.search(Ljava/util/List;Ljava/lang/String;)Ledu/umd/cs/findbugs/classfile/ICodeBaseEntry; (50 bytes) @ 0x00007faed15ffa4c [0x00007faed15ff6e0+0x36c] +J 1820 C1 edu.umd.cs.findbugs.classfile.impl.ClassPathImpl.lookupResource(Ljava/lang/String;)Ledu/umd/cs/findbugs/classfile/ICodeBaseEntry; (69 bytes) @ 0x00007faed165e80c [0x00007faed165e520+0x2ec] +J 2055 C1 edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ledu/umd/cs/findbugs/classfile/analysis/ClassData; (149 bytes) @ 0x00007faed171a3c4 [0x00007faed1719d00+0x6c4] +J 1819 C1 edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ljava/lang/Object;)Ljava/lang/Object; (10 bytes) @ 0x00007faed165e16c [0x00007faed165e000+0x16c] +J 1695 C1 edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(Ljava/lang/Class;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ljava/lang/Object; (239 bytes) @ 0x00007faed160e874 [0x00007faed160da80+0xdf4] +J 2056 C1 edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ledu/umd/cs/findbugs/classfile/analysis/ClassInfo; (164 bytes) @ 0x00007faed1715cfc [0x00007faed1715b00+0x1fc] +J 1818 C1 edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ljava/lang/Object;)Ljava/lang/Object; (10 bytes) @ 0x00007faed165dcac [0x00007faed165db40+0x16c] +J 1695 C1 edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(Ljava/lang/Class;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ljava/lang/Object; (239 bytes) @ 0x00007faed160e874 [0x00007faed160da80+0xdf4] +j edu.umd.cs.findbugs.ba.XFactory.resolveXMethod(Ledu/umd/cs/findbugs/classfile/MethodDescriptor;)Ledu/umd/cs/findbugs/ba/XMethod;+32 +j edu.umd.cs.findbugs.ba.XFactory.createXMethod(Ledu/umd/cs/findbugs/classfile/MethodDescriptor;)Ledu/umd/cs/findbugs/ba/XMethod;+26 +j edu.umd.cs.findbugs.ba.XFactory.createXMethodUsingSlashedClassName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Ledu/umd/cs/findbugs/ba/XMethod;+18 +j edu.umd.cs.findbugs.ba.XFactory.createReferencedXMethod(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;)Ledu/umd/cs/findbugs/ba/XMethod;+27 +j edu.umd.cs.findbugs.OpcodeStack.pushByInvoke(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;Z)V+84 +j edu.umd.cs.findbugs.OpcodeStack.processMethodCall(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;I)V+1453 +j edu.umd.cs.findbugs.OpcodeStack.sawOpcode(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;I)V+4426 +J 2177 C1 edu.umd.cs.findbugs.bcel.OpcodeStackDetector.afterOpcode(I)V (10 bytes) @ 0x00007faed175f0cc [0x00007faed175f040+0x8c] +j edu.umd.cs.findbugs.visitclass.DismantleBytecode.visit(Lorg/apache/bcel/classfile/Code;)V+2375 +j edu.umd.cs.findbugs.detect.FieldItemSummary.visit(Lorg/apache/bcel/classfile/Code;)V+7 +j edu.umd.cs.findbugs.visitclass.BetterVisitor.visitCode(Lorg/apache/bcel/classfile/Code;)V+2 +j edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitCode(Lorg/apache/bcel/classfile/Code;)V+7 +j edu.umd.cs.findbugs.bcel.OpcodeStackDetector.visitCode(Lorg/apache/bcel/classfile/Code;)V+31 +j org.apache.bcel.classfile.Code.accept(Lorg/apache/bcel/classfile/Visitor;)V+2 +j edu.umd.cs.findbugs.visitclass.PreorderVisitor.doVisitMethod(Lorg/apache/bcel/classfile/Method;)V+154 +j edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitJavaClass(Lorg/apache/bcel/classfile/JavaClass;)V+206 +j org.apache.bcel.classfile.JavaClass.accept(Lorg/apache/bcel/classfile/Visitor;)V+2 +j edu.umd.cs.findbugs.BytecodeScanningDetector.visitClassContext(Ledu/umd/cs/findbugs/ba/ClassContext;)V+10 +j edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)V+43 +j edu.umd.cs.findbugs.FindBugs2.analyzeApplication()V+1126 +j edu.umd.cs.findbugs.FindBugs2.execute()V+405 +j edu.umd.cs.findbugs.FindBugs.runMain(Ledu/umd/cs/findbugs/IFindBugsEngine;Ledu/umd/cs/findbugs/TextUICommandLine;)V+34 +j edu.umd.cs.findbugs.FindBugs2.main([Ljava/lang/String;)V+55 +v ~StubRoutines::call_stub +V [libjvm.so+0x693e76] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x1056 +V [libjvm.so+0x6d5292] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x362 +V [libjvm.so+0x6f1afa] jni_CallStaticVoidMethod+0x17a +C [libjli.so+0x80ff] JavaMain+0x81f +C [libpthread.so.0+0x76ba] start_thread+0xca + +Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) +J 164 java.util.zip.ZipFile.getEntry(J[BZ)J (0 bytes) @ 0x00007faed116a818 [0x00007faed116a7c0+0x58] +J 1586 C2 java.util.zip.ZipFile.getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry; (101 bytes) @ 0x00007faed15bf8a8 [0x00007faed15bf540+0x368] +J 1712 C2 edu.umd.cs.findbugs.classfile.impl.ZipFileCodeBase.lookupResource(Ljava/lang/String;)Ledu/umd/cs/findbugs/classfile/ICodeBaseEntry; (34 bytes) @ 0x00007faed16131f0 [0x00007faed1613040+0x1b0] +J 1675 C1 edu.umd.cs.findbugs.classfile.impl.ClassPathImpl.search(Ljava/util/List;Ljava/lang/String;)Ledu/umd/cs/findbugs/classfile/ICodeBaseEntry; (50 bytes) @ 0x00007faed15ffa4c [0x00007faed15ff6e0+0x36c] +J 1820 C1 edu.umd.cs.findbugs.classfile.impl.ClassPathImpl.lookupResource(Ljava/lang/String;)Ledu/umd/cs/findbugs/classfile/ICodeBaseEntry; (69 bytes) @ 0x00007faed165e80c [0x00007faed165e520+0x2ec] +J 2055 C1 edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ledu/umd/cs/findbugs/classfile/analysis/ClassData; (149 bytes) @ 0x00007faed171a3c4 [0x00007faed1719d00+0x6c4] +J 1819 C1 edu.umd.cs.findbugs.classfile.engine.ClassDataAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ljava/lang/Object;)Ljava/lang/Object; (10 bytes) @ 0x00007faed165e16c [0x00007faed165e000+0x16c] +J 1695 C1 edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(Ljava/lang/Class;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ljava/lang/Object; (239 bytes) @ 0x00007faed160e874 [0x00007faed160da80+0xdf4] +J 2056 C1 edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ledu/umd/cs/findbugs/classfile/analysis/ClassInfo; (164 bytes) @ 0x00007faed1715cfc [0x00007faed1715b00+0x1fc] +J 1818 C1 edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(Ledu/umd/cs/findbugs/classfile/IAnalysisCache;Ljava/lang/Object;)Ljava/lang/Object; (10 bytes) @ 0x00007faed165dcac [0x00007faed165db40+0x16c] +J 1695 C1 edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(Ljava/lang/Class;Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)Ljava/lang/Object; (239 bytes) @ 0x00007faed160e874 [0x00007faed160da80+0xdf4] +j edu.umd.cs.findbugs.ba.XFactory.resolveXMethod(Ledu/umd/cs/findbugs/classfile/MethodDescriptor;)Ledu/umd/cs/findbugs/ba/XMethod;+32 +j edu.umd.cs.findbugs.ba.XFactory.createXMethod(Ledu/umd/cs/findbugs/classfile/MethodDescriptor;)Ledu/umd/cs/findbugs/ba/XMethod;+26 +j edu.umd.cs.findbugs.ba.XFactory.createXMethodUsingSlashedClassName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Ledu/umd/cs/findbugs/ba/XMethod;+18 +j edu.umd.cs.findbugs.ba.XFactory.createReferencedXMethod(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;)Ledu/umd/cs/findbugs/ba/XMethod;+27 +j edu.umd.cs.findbugs.OpcodeStack.pushByInvoke(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;Z)V+84 +j edu.umd.cs.findbugs.OpcodeStack.processMethodCall(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;I)V+1453 +j edu.umd.cs.findbugs.OpcodeStack.sawOpcode(Ledu/umd/cs/findbugs/visitclass/DismantleBytecode;I)V+4426 +J 2177 C1 edu.umd.cs.findbugs.bcel.OpcodeStackDetector.afterOpcode(I)V (10 bytes) @ 0x00007faed175f0cc [0x00007faed175f040+0x8c] +j edu.umd.cs.findbugs.visitclass.DismantleBytecode.visit(Lorg/apache/bcel/classfile/Code;)V+2375 +j edu.umd.cs.findbugs.detect.FieldItemSummary.visit(Lorg/apache/bcel/classfile/Code;)V+7 +j edu.umd.cs.findbugs.visitclass.BetterVisitor.visitCode(Lorg/apache/bcel/classfile/Code;)V+2 +j edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitCode(Lorg/apache/bcel/classfile/Code;)V+7 +j edu.umd.cs.findbugs.bcel.OpcodeStackDetector.visitCode(Lorg/apache/bcel/classfile/Code;)V+31 +j org.apache.bcel.classfile.Code.accept(Lorg/apache/bcel/classfile/Visitor;)V+2 +j edu.umd.cs.findbugs.visitclass.PreorderVisitor.doVisitMethod(Lorg/apache/bcel/classfile/Method;)V+154 +j edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitJavaClass(Lorg/apache/bcel/classfile/JavaClass;)V+206 +j org.apache.bcel.classfile.JavaClass.accept(Lorg/apache/bcel/classfile/Visitor;)V+2 +j edu.umd.cs.findbugs.BytecodeScanningDetector.visitClassContext(Ledu/umd/cs/findbugs/ba/ClassContext;)V+10 +j edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(Ledu/umd/cs/findbugs/classfile/ClassDescriptor;)V+43 +j edu.umd.cs.findbugs.FindBugs2.analyzeApplication()V+1126 +j edu.umd.cs.findbugs.FindBugs2.execute()V+405 +j edu.umd.cs.findbugs.FindBugs.runMain(Ledu/umd/cs/findbugs/IFindBugsEngine;Ledu/umd/cs/findbugs/TextUICommandLine;)V+34 +j edu.umd.cs.findbugs.FindBugs2.main([Ljava/lang/String;)V+55 +v ~StubRoutines::call_stub + +--------------- P R O C E S S --------------- + +Java Threads: ( => current thread ) + 0x00007fae78060800 JavaThread "Timer-0" daemon [_thread_blocked, id=3606, stack(0x00007faec8ca7000,0x00007faec8da8000)] + 0x00007faee06e9000 JavaThread "Plugin update checker" daemon [_thread_blocked, id=3601, stack(0x00007faec97fd000,0x00007faec98fe000)] + 0x00007faee06e7800 JavaThread "Check for updates" daemon [_thread_in_native, id=3599, stack(0x00007faec98fe000,0x00007faec99ff000)] + 0x00007faee00e8000 JavaThread "Service Thread" daemon [_thread_blocked, id=3582, stack(0x00007faeca10f000,0x00007faeca210000)] + 0x00007faee00ca800 JavaThread "C1 CompilerThread3" daemon [_thread_in_native, id=3581, stack(0x00007faeca210000,0x00007faeca311000)] + 0x00007faee00c8800 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=3580, stack(0x00007faeca311000,0x00007faeca412000)] + 0x00007faee00c6800 JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=3579, stack(0x00007faeca412000,0x00007faeca513000)] + 0x00007faee00c3800 JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=3578, stack(0x00007faeca513000,0x00007faeca614000)] + 0x00007faee00c2800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=3577, stack(0x00007faeca614000,0x00007faeca715000)] + 0x00007faee008f000 JavaThread "Finalizer" daemon [_thread_blocked, id=3576, stack(0x00007faecb0f1000,0x00007faecb1f2000)] + 0x00007faee008a800 JavaThread "Reference Handler" daemon [_thread_blocked, id=3575, stack(0x00007faecb1f2000,0x00007faecb2f3000)] +=>0x00007faee000d000 JavaThread "main" [_thread_in_native, id=3560, stack(0x00007faee9818000,0x00007faee9919000)] + +Other Threads: + 0x00007faee0083000 VMThread [stack: 0x00007faecb2f3000,0x00007faecb3f4000] [id=3574] + 0x00007faee00eb000 WatcherThread [stack: 0x00007faeca00e000,0x00007faeca10f000] [id=3583] + +VM state:not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap: + PSYoungGen total 138240K, used 48171K [0x00000000f5580000, 0x0000000100000000, 0x0000000100000000) + eden space 128000K, 29% used [0x00000000f5580000,0x00000000f7a8f840,0x00000000fd280000) + from space 10240K, 99% used [0x00000000fd280000,0x00000000fdc7b540,0x00000000fdc80000) + to space 10240K, 0% used [0x00000000ff600000,0x00000000ff600000,0x0000000100000000) + ParOldGen total 169472K, used 6904K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 4% used [0x00000000e0000000,0x00000000e06be140,0x00000000ea580000) + Metaspace used 15114K, capacity 15310K, committed 15616K, reserved 1062912K + class space used 1904K, capacity 1948K, committed 2048K, reserved 1048576K + +Card table byte_map: [0x00007faee64b2000,0x00007faee65b3000] byte_map_base: 0x00007faee5db2000 + +Marking Bits: (ParMarkBitMap*) 0x00007faee8ce4f80 + Begin Bits: [0x00007faee4caa000, 0x00007faee54aa000) + End Bits: [0x00007faee54aa000, 0x00007faee5caa000) + +Polling page: 0x00007faee9935000 + +CodeCache: size=245760Kb used=7591Kb max_used=7602Kb free=238168Kb + bounds [0x00007faed1000000, 0x00007faed1780000, 0x00007faee0000000] + total_blobs=2505 nmethods=2170 adapters=247 + compilation: enabled + +Compilation events (10 events): +Event: 2.793 Thread 0x00007faee00c8800 2224 4 edu.umd.cs.findbugs.visitclass.PreorderVisitor::getStringFromIndex (17 bytes) +Event: 2.794 Thread 0x00007faee00c8800 nmethod 2224 0x00007faed1770510 code [0x00007faed1770680, 0x00007faed1770798] +Event: 2.794 Thread 0x00007faee00c8800 2225 4 org.apache.bcel.classfile.ConstantUtf8::accept (8 bytes) +Event: 2.794 Thread 0x00007faee00c8800 nmethod 2225 0x00007faed176ad50 code [0x00007faed176aea0, 0x00007faed176af18] +Event: 2.795 Thread 0x00007faee00c8800 2226 4 edu.umd.cs.findbugs.OpcodeStack::isTop (11 bytes) +Event: 2.796 Thread 0x00007faee00c8800 nmethod 2226 0x00007faed1764190 code [0x00007faed17642e0, 0x00007faed1764338] +Event: 2.797 Thread 0x00007faee00c8800 2227 4 java.util.BitSet::checkInvariants (111 bytes) +Event: 2.797 Thread 0x00007faee00c8800 nmethod 2227 0x00007faed1770a50 code [0x00007faed1770ba0, 0x00007faed1770bf8] +Event: 2.798 Thread 0x00007faee00c8800 2229 4 java.util.BitSet::get (69 bytes) +Event: 2.799 Thread 0x00007faee00c8800 nmethod 2229 0x00007faed1770210 code [0x00007faed1770360, 0x00007faed1770438] + +GC Heap History (6 events): +Event: 1.101 GC heap before +{Heap before GC invocations=1 (full 0): + PSYoungGen total 74240K, used 64000K [0x00000000f5580000, 0x00000000fa800000, 0x0000000100000000) + eden space 64000K, 100% used [0x00000000f5580000,0x00000000f9400000,0x00000000f9400000) + from space 10240K, 0% used [0x00000000f9e00000,0x00000000f9e00000,0x00000000fa800000) + to space 10240K, 0% used [0x00000000f9400000,0x00000000f9400000,0x00000000f9e00000) + ParOldGen total 169472K, used 0K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 0% used [0x00000000e0000000,0x00000000e0000000,0x00000000ea580000) + Metaspace used 8975K, capacity 9034K, committed 9216K, reserved 1056768K + class space used 1178K, capacity 1201K, committed 1280K, reserved 1048576K +Event: 1.113 GC heap after +Heap after GC invocations=1 (full 0): + PSYoungGen total 74240K, used 7234K [0x00000000f5580000, 0x00000000fe680000, 0x0000000100000000) + eden space 64000K, 0% used [0x00000000f5580000,0x00000000f5580000,0x00000000f9400000) + from space 10240K, 70% used [0x00000000f9400000,0x00000000f9b10bf0,0x00000000f9e00000) + to space 10240K, 0% used [0x00000000fdc80000,0x00000000fdc80000,0x00000000fe680000) + ParOldGen total 169472K, used 72K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 0% used [0x00000000e0000000,0x00000000e0012010,0x00000000ea580000) + Metaspace used 8975K, capacity 9034K, committed 9216K, reserved 1056768K + class space used 1178K, capacity 1201K, committed 1280K, reserved 1048576K +} +Event: 1.626 GC heap before +{Heap before GC invocations=2 (full 0): + PSYoungGen total 74240K, used 71234K [0x00000000f5580000, 0x00000000fe680000, 0x0000000100000000) + eden space 64000K, 100% used [0x00000000f5580000,0x00000000f9400000,0x00000000f9400000) + from space 10240K, 70% used [0x00000000f9400000,0x00000000f9b10bf0,0x00000000f9e00000) + to space 10240K, 0% used [0x00000000fdc80000,0x00000000fdc80000,0x00000000fe680000) + ParOldGen total 169472K, used 72K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 0% used [0x00000000e0000000,0x00000000e0012010,0x00000000ea580000) + Metaspace used 12075K, capacity 12284K, committed 12416K, reserved 1060864K + class space used 1563K, capacity 1624K, committed 1664K, reserved 1048576K +Event: 1.640 GC heap after +Heap after GC invocations=2 (full 0): + PSYoungGen total 138240K, used 6784K [0x00000000f5580000, 0x00000000fe680000, 0x0000000100000000) + eden space 128000K, 0% used [0x00000000f5580000,0x00000000f5580000,0x00000000fd280000) + from space 10240K, 66% used [0x00000000fdc80000,0x00000000fe320168,0x00000000fe680000) + to space 10240K, 0% used [0x00000000fd280000,0x00000000fd280000,0x00000000fdc80000) + ParOldGen total 169472K, used 80K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 0% used [0x00000000e0000000,0x00000000e0014010,0x00000000ea580000) + Metaspace used 12075K, capacity 12284K, committed 12416K, reserved 1060864K + class space used 1563K, capacity 1624K, committed 1664K, reserved 1048576K +} +Event: 2.551 GC heap before +{Heap before GC invocations=3 (full 0): + PSYoungGen total 138240K, used 134784K [0x00000000f5580000, 0x00000000fe680000, 0x0000000100000000) + eden space 128000K, 100% used [0x00000000f5580000,0x00000000fd280000,0x00000000fd280000) + from space 10240K, 66% used [0x00000000fdc80000,0x00000000fe320168,0x00000000fe680000) + to space 10240K, 0% used [0x00000000fd280000,0x00000000fd280000,0x00000000fdc80000) + ParOldGen total 169472K, used 80K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 0% used [0x00000000e0000000,0x00000000e0014010,0x00000000ea580000) + Metaspace used 14572K, capacity 14702K, committed 14976K, reserved 1062912K + class space used 1868K, capacity 1916K, committed 1920K, reserved 1048576K +Event: 2.593 GC heap after +Heap after GC invocations=3 (full 0): + PSYoungGen total 138240K, used 10221K [0x00000000f5580000, 0x0000000100000000, 0x0000000100000000) + eden space 128000K, 0% used [0x00000000f5580000,0x00000000f5580000,0x00000000fd280000) + from space 10240K, 99% used [0x00000000fd280000,0x00000000fdc7b540,0x00000000fdc80000) + to space 10240K, 0% used [0x00000000ff600000,0x00000000ff600000,0x0000000100000000) + ParOldGen total 169472K, used 6904K [0x00000000e0000000, 0x00000000ea580000, 0x00000000f5580000) + object space 169472K, 4% used [0x00000000e0000000,0x00000000e06be140,0x00000000ea580000) + Metaspace used 14572K, capacity 14702K, committed 14976K, reserved 1062912K + class space used 1868K, capacity 1916K, committed 1920K, reserved 1048576K +} + +Deoptimization events (10 events): +Event: 2.642 Thread 0x00007faee000d000 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007faed14ecdf4 method=java.io.BufferedInputStream.read([BII)I @ 101 +Event: 2.655 Thread 0x00007faee000d000 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007faed172b274 method=java.io.DataInputStream.readUnsignedShort()I @ 4 +Event: 2.655 Thread 0x00007faee000d000 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007faed172b274 method=java.io.DataInputStream.readUnsignedShort()I @ 4 +Event: 2.655 Thread 0x00007faee000d000 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007faed172b274 method=java.io.DataInputStream.readUnsignedShort()I @ 4 +Event: 2.655 Thread 0x00007faee000d000 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007faed172b274 method=java.io.DataInputStream.readUnsignedShort()I @ 4 +Event: 2.663 Thread 0x00007faee000d000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00007faed1606518 method=java.util.HashMap.clear()V @ 23 +Event: 2.667 Thread 0x00007faee000d000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00007faed1707758 method=org.objectweb.asm.ClassReader.readMethod(Lorg/objectweb/asm/ClassVisitor;Lorg/objectweb/asm/Context;I)I @ 377 +Event: 2.679 Thread 0x00007faee000d000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00007faed16f0718 method=edu.umd.cs.findbugs.classfile.FieldOrMethodDescriptor.haveEqualFields(Ledu/umd/cs/findbugs/classfile/FieldOrMethodDescriptor;)Z @ 22 +Event: 2.791 Thread 0x00007faee000d000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00007faed15b4f08 method=java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; @ 193 +Event: 2.792 Thread 0x00007faee000d000 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00007faed14ecdf4 method=java.io.BufferedInputStream.read([BII)I @ 101 + +Internal exceptions (10 events): +Event: 0.130 Thread 0x00007faee000d000 Exception (0x00000000f58ce070) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/jvm.cpp, line 1390] +Event: 0.130 Thread 0x00007faee000d000 Exception (0x00000000f58ce280) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/jvm.cpp, line 1390] +Event: 0.130 Thread 0x00007faee000d000 Exception (0x00000000f58d06e8) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/jvm.cpp, line 1390] +Event: 0.130 Thread 0x00007faee000d000 Exception (0x00000000f58d08f8) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/jvm.cpp, line 1390] +Event: 0.875 Thread 0x00007faee000d000 Implicit null exception at 0x00007faed1352db0 to 0x00007faed1352eb5 +Event: 0.878 Thread 0x00007faee000d000 Implicit null exception at 0x00007faed138ee88 to 0x00007faed138f0bd +Event: 1.388 Thread 0x00007faee000d000 Exception (0x00000000f854c6a0) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/jni.cpp, line 709] +Event: 1.524 Thread 0x00007faee06e7800 Exception (0x00000000f8cc5690) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/methodHandles.cpp, line 1146] +Event: 1.539 Thread 0x00007faee06e7800 Exception (0x00000000f8cd29b0) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/methodHandles.cpp, line 1146] +Event: 2.531 Thread 0x00007faee000d000 Exception (0x00000000fd0ab5a8) thrown at [/HUDSON/workspace/8-2-build-linux-amd64/jdk8u151/9699/hotspot/src/share/vm/prims/jni.cpp, line 709] + +Events (10 events): +Event: 2.683 loading class javax/annotation/CheckReturnValue +Event: 2.683 loading class javax/annotation/CheckReturnValue done +Event: 2.683 loading class edu/umd/cs/findbugs/annotations/CheckReturnValue +Event: 2.683 loading class edu/umd/cs/findbugs/annotations/CheckReturnValue done +Event: 2.791 Thread 0x00007faee000d000 Uncommon trap: trap_request=0xffffff65 fr.pc=0x00007faed15b4f08 +Event: 2.791 Thread 0x00007faee000d000 DEOPT PACKING pc=0x00007faed15b4f08 sp=0x00007faee9917520 +Event: 2.791 Thread 0x00007faee000d000 DEOPT UNPACKING pc=0x00007faed1005229 sp=0x00007faee99173e0 mode 2 +Event: 2.792 Thread 0x00007faee000d000 Uncommon trap: trap_request=0xffffffde fr.pc=0x00007faed14ecdf4 +Event: 2.792 Thread 0x00007faee000d000 DEOPT PACKING pc=0x00007faed14ecdf4 sp=0x00007faee9916e70 +Event: 2.792 Thread 0x00007faee000d000 DEOPT UNPACKING pc=0x00007faed1005229 sp=0x00007faee9916d48 mode 2 + + +Dynamic libraries: +00400000-00401000 r-xp 00000000 08:02 21638574 /usr/lib/jvm/java-8-oracle/jre/bin/java +00600000-00601000 rw-p 00000000 08:02 21638574 /usr/lib/jvm/java-8-oracle/jre/bin/java +006ad000-006ce000 rw-p 00000000 00:00 0 [heap] +e0000000-ea580000 rw-p 00000000 00:00 0 +ea580000-f5580000 ---p 00000000 00:00 0 +f5580000-100000000 rw-p 00000000 00:00 0 +100000000-100200000 rw-p 00000000 00:00 0 +100200000-140000000 ---p 00000000 00:00 0 +7fae6c000000-7fae6c021000 rw-p 00000000 00:00 0 +7fae6c021000-7fae70000000 ---p 00000000 00:00 0 +7fae70000000-7fae70021000 rw-p 00000000 00:00 0 +7fae70021000-7fae74000000 ---p 00000000 00:00 0 +7fae74000000-7fae74021000 rw-p 00000000 00:00 0 +7fae74021000-7fae78000000 ---p 00000000 00:00 0 +7fae78000000-7fae780e4000 rw-p 00000000 00:00 0 +7fae780e4000-7fae7c000000 ---p 00000000 00:00 0 +7fae7c000000-7fae7ca68000 rw-p 00000000 00:00 0 +7fae7ca68000-7fae80000000 ---p 00000000 00:00 0 +7fae80000000-7fae80021000 rw-p 00000000 00:00 0 +7fae80021000-7fae84000000 ---p 00000000 00:00 0 +7fae84000000-7fae84f1c000 rw-p 00000000 00:00 0 +7fae84f1c000-7fae88000000 ---p 00000000 00:00 0 +7fae88000000-7fae88a7e000 rw-p 00000000 00:00 0 +7fae88a7e000-7fae8c000000 ---p 00000000 00:00 0 +7fae8c000000-7fae8c021000 rw-p 00000000 00:00 0 +7fae8c021000-7fae90000000 ---p 00000000 00:00 0 +7fae90000000-7fae913a5000 rw-p 00000000 00:00 0 +7fae913a5000-7fae94000000 ---p 00000000 00:00 0 +7fae94000000-7fae94021000 rw-p 00000000 00:00 0 +7fae94021000-7fae98000000 ---p 00000000 00:00 0 +7fae98000000-7fae98021000 rw-p 00000000 00:00 0 +7fae98021000-7fae9c000000 ---p 00000000 00:00 0 +7fae9c000000-7fae9c021000 rw-p 00000000 00:00 0 +7fae9c021000-7faea0000000 ---p 00000000 00:00 0 +7faea0000000-7faea0021000 rw-p 00000000 00:00 0 +7faea0021000-7faea4000000 ---p 00000000 00:00 0 +7faea4000000-7faea4021000 rw-p 00000000 00:00 0 +7faea4021000-7faea8000000 ---p 00000000 00:00 0 +7faea8000000-7faea8021000 rw-p 00000000 00:00 0 +7faea8021000-7faeac000000 ---p 00000000 00:00 0 +7faeac000000-7faeac021000 rw-p 00000000 00:00 0 +7faeac021000-7faeb0000000 ---p 00000000 00:00 0 +7faeb4000000-7faeb4021000 rw-p 00000000 00:00 0 +7faeb4021000-7faeb8000000 ---p 00000000 00:00 0 +7faebc000000-7faebc021000 rw-p 00000000 00:00 0 +7faebc021000-7faec0000000 ---p 00000000 00:00 0 +7faec0fff000-7faec4000000 rw-p 00000000 00:00 0 +7faec4000000-7faec4021000 rw-p 00000000 00:00 0 +7faec4021000-7faec8000000 ---p 00000000 00:00 0 +7faec8585000-7faec89db000 rw-p 00000000 00:00 0 +7faec89db000-7faec8a9b000 ---p 00000000 00:00 0 +7faec8a9b000-7faec8a9e000 r--s 0001d000 00:2e 4329296 /home/honza/.m2/repository/cz/o2/proxima/platform-rpc-proto/0.1-SNAPSHOT/platform-rpc-proto-0.1-SNAPSHOT.jar +7faec8a9e000-7faec8a9f000 r--s 00002000 00:2e 4329303 /home/honza/.m2/repository/cz/o2/proxima/platform-client/0.1-SNAPSHOT/platform-client-0.1-SNAPSHOT.jar +7faec8a9f000-7faec8aa3000 r--s 0002f000 00:2e 12060012 /home/honza/.m2/repository/commons-io/commons-io/2.5/commons-io-2.5.jar +7faec8aa3000-7faec8aa4000 r--s 0000c000 00:2e 3410458 /home/honza/.m2/repository/commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.jar +7faec8aa4000-7faec8aa6000 r--s 00003000 00:2e 9832123 /home/honza/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar +7faec8aa6000-7faec8ae4000 r--s 00259000 00:2e 12195426 /home/honza/.m2/repository/cz/seznam/euphoria/shaded-guava/21.0/shaded-guava-21.0.jar +7faec8ae4000-7faec8aed000 r--s 00045000 00:2e 12062576 /home/honza/.m2/repository/cz/seznam/euphoria/euphoria-core/0.7.0/euphoria-core-0.7.0.jar +7faec8aed000-7faec8af0000 r--s 00011000 00:2e 12062577 /home/honza/.m2/repository/cz/seznam/euphoria/euphoria-inmem/0.7.0/euphoria-inmem-0.7.0.jar +7faec8af0000-7faec8b08000 r--s 00132000 00:2e 12846505 /home/honza/.m2/repository/org/freemarker/freemarker/2.3.23/freemarker-2.3.23.jar +7faec8b08000-7faec8b11000 r--s 0006f000 00:2e 8654088 /home/honza/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar +7faec8b11000-7faec8b13000 r--s 00009000 00:2e 12848012 /home/honza/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar +7faec8b13000-7faec8b14000 r--s 00002000 00:2e 12848068 /home/honza/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar +7faec8b14000-7faec8b23000 r--s 00130000 00:2e 12059283 /home/honza/.m2/repository/com/google/protobuf/protobuf-java/3.0.2/protobuf-java-3.0.2.jar +7faec8b23000-7faec8b25000 r--s 00008000 00:2e 11274967 /home/honza/.m2/repository/io/grpc/grpc-stub/1.7.0/grpc-stub-1.7.0.jar +7faec8b25000-7faec8b27000 r--s 0000b000 00:2e 12059227 /home/honza/.m2/repository/com/google/protobuf/nano/protobuf-javanano/3.0.0-alpha-5/protobuf-javanano-3.0.0-alpha-5.jar +7faec8b27000-7faec8b29000 r--s 00000000 00:2e 11014867 /home/honza/.m2/repository/io/grpc/grpc-protobuf-nano/1.7.0/grpc-protobuf-nano-1.7.0.jar +7faec8b29000-7faec8b2a000 r--s 00001000 00:2e 10881509 /home/honza/.m2/repository/io/grpc/grpc-protobuf-lite/1.7.0/grpc-protobuf-lite-1.7.0.jar +7faec8b2a000-7faec8b3a000 r--s 00184000 00:2e 7738063 /home/honza/.m2/repository/com/google/api/grpc/proto-google-common-protos/0.1.9/proto-google-common-protos-0.1.9.jar +7faec8b3a000-7faec8b3f000 r--s 00034000 00:2e 9963432 /home/honza/.m2/repository/com/google/code/gson/gson/2.7/gson-2.7.jar +7faec8b3f000-7faec8b41000 r--s 0000f000 00:2e 12063441 /home/honza/.m2/repository/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0.jar +7faec8b41000-7faec8b42000 r--s 00001000 00:2e 11144912 /home/honza/.m2/repository/io/grpc/grpc-protobuf/1.7.0/grpc-protobuf-1.7.0.jar +7faec8b42000-7faec8b44000 r--s 0000f000 00:2e 7605914 /home/honza/.m2/repository/com/squareup/okio/okio/1.6.0/okio-1.6.0.jar +7faec8b44000-7faec8b49000 r--s 00049000 00:2e 6951246 /home/honza/.m2/repository/com/squareup/okhttp/okhttp/2.5.0/okhttp-2.5.0.jar +7faec8b49000-7faec8b4c000 r--s 00022000 00:2e 10752263 /home/honza/.m2/repository/io/grpc/grpc-okhttp/1.7.0/grpc-okhttp-1.7.0.jar +7faec8b4c000-7faec8b50000 r--s 0001a000 00:2e 13246438 /home/honza/.m2/repository/io/netty/netty-codec-socks/4.1.16.Final/netty-codec-socks-4.1.16.Final.jar +7faec8b50000-7faec8b59000 r--s 00065000 00:2e 12850689 /home/honza/.m2/repository/io/netty/netty-transport/4.1.16.Final/netty-transport-4.1.16.Final.jar +7faec8b59000-7faec8b5b000 r--s 00004000 00:2e 13246436 /home/honza/.m2/repository/io/netty/netty-handler-proxy/4.1.16.Final/netty-handler-proxy-4.1.16.Final.jar +7faec8b5b000-7faec8b67000 r--s 0007e000 00:2e 12985311 /home/honza/.m2/repository/io/netty/netty-common/4.1.16.Final/netty-common-4.1.16.Final.jar +7faec8b67000-7faec8b6b000 r--s 0003f000 00:2e 12985308 /home/honza/.m2/repository/io/netty/netty-buffer/4.1.16.Final/netty-buffer-4.1.16.Final.jar +7faec8b6b000-7faec8b72000 r--s 00054000 00:2e 13113335 /home/honza/.m2/repository/io/netty/netty-handler/4.1.16.Final/netty-handler-4.1.16.Final.jar +7faec8b72000-7faec8b78000 r--s 00047000 00:2e 12719912 /home/honza/.m2/repository/io/netty/netty-codec/4.1.16.Final/netty-codec-4.1.16.Final.jar +7faec8b78000-7faec8b83000 r--s 0007c000 00:2e 12592036 /home/honza/.m2/repository/io/netty/netty-codec-http/4.1.16.Final/netty-codec-http-4.1.16.Final.jar +7faec8b83000-7faec8b8b000 r--s 0005b000 00:2e 12454100 /home/honza/.m2/repository/io/netty/netty-codec-http2/4.1.16.Final/netty-codec-http2-4.1.16.Final.jar +7faec8b8b000-7faec8b8f000 r--s 00028000 00:2e 10622347 /home/honza/.m2/repository/io/grpc/grpc-netty/1.7.0/grpc-netty-1.7.0.jar +7faec8b8f000-7faec8b93000 r--s 00017000 00:2e 5901087 /home/honza/.m2/repository/io/opencensus/opencensus-api/0.6.0/opencensus-api-0.6.0.jar +7faec8b93000-7faec8bbf000 r--s 00208000 00:2e 11012131 /home/honza/.m2/repository/com/google/guava/guava/19.0/guava-19.0.jar +7faec8bbf000-7faec8bd5000 r--s 0014a000 00:2e 12847683 /home/honza/.m2/repository/org/projectlombok/lombok/1.16.16/lombok-1.16.16.jar +7faec8bd5000-7faec8c45000 r--s 00645000 00:2e 12717490 /home/honza/.m2/repository/org/codehaus/groovy/groovy-all/2.4.10/groovy-all-2.4.10.jar +7faec8c45000-7faec8ca7000 r--s 00408000 00:2e 4329281 /home/honza/.m2/repository/cz/o2/proxima/platform-core/0.1-SNAPSHOT/platform-core-0.1-SNAPSHOT.jar +7faec8ca7000-7faec8caa000 ---p 00000000 00:00 0 +7faec8caa000-7faec8da8000 rw-p 00000000 00:00 0 +7faec8da8000-7faec8dbf000 r-xp 00000000 08:02 12194385 /lib/x86_64-linux-gnu/libresolv-2.23.so +7faec8dbf000-7faec8fbf000 ---p 00017000 08:02 12194385 /lib/x86_64-linux-gnu/libresolv-2.23.so +7faec8fbf000-7faec8fc0000 r--p 00017000 08:02 12194385 /lib/x86_64-linux-gnu/libresolv-2.23.so +7faec8fc0000-7faec8fc1000 rw-p 00018000 08:02 12194385 /lib/x86_64-linux-gnu/libresolv-2.23.so +7faec8fc1000-7faec8fc3000 rw-p 00000000 00:00 0 +7faec8fc3000-7faec8fc8000 r-xp 00000000 08:02 12194330 /lib/x86_64-linux-gnu/libnss_dns-2.23.so +7faec8fc8000-7faec91c8000 ---p 00005000 08:02 12194330 /lib/x86_64-linux-gnu/libnss_dns-2.23.so +7faec91c8000-7faec91c9000 r--p 00005000 08:02 12194330 /lib/x86_64-linux-gnu/libnss_dns-2.23.so +7faec91c9000-7faec91ca000 rw-p 00006000 08:02 12194330 /lib/x86_64-linux-gnu/libnss_dns-2.23.so +7faec91ca000-7faec91cc000 r-xp 00000000 08:02 12194338 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 +7faec91cc000-7faec93cb000 ---p 00002000 08:02 12194338 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 +7faec93cb000-7faec93cc000 r--p 00001000 08:02 12194338 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 +7faec93cc000-7faec93cd000 rw-p 00002000 08:02 12194338 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 +7faec93cd000-7faec93ce000 r--s 00007000 00:2e 13113337 /home/honza/.m2/repository/io/netty/netty-resolver/4.1.16.Final/netty-resolver-4.1.16.Final.jar +7faec93ce000-7faec93cf000 r--s 00006000 00:2e 10358565 /home/honza/.m2/repository/io/grpc/grpc-context/1.7.0/grpc-context-1.7.0.jar +7faec93cf000-7faec93d2000 r--s 00014000 00:2e 11931083 /home/honza/.m2/repository/com/google/instrumentation/instrumentation-api/0.4.3/instrumentation-api-0.4.3.jar +7faec93d2000-7faec93d3000 r--s 00002000 00:2e 10226950 /home/honza/.m2/repository/com/google/errorprone/error_prone_annotations/2.0.19/error_prone_annotations-2.0.19.jar +7faec93d3000-7faec93de000 r--s 00070000 00:2e 10489843 /home/honza/.m2/repository/io/grpc/grpc-core/1.7.0/grpc-core-1.7.0.jar +7faec93de000-7faec93df000 r--s 00000000 00:2e 8262348 /home/honza/.m2/repository/com/google/auth/google-auth-library-credentials/0.4.0/google-auth-library-credentials-0.4.0.jar +7faec93df000-7faec93e1000 r--s 00002000 00:2e 10226948 /home/honza/.m2/repository/io/grpc/grpc-auth/1.7.0/grpc-auth-1.7.0.jar +7faec93e1000-7faec93e2000 r--s 00000000 00:2e 10095958 /home/honza/.m2/repository/io/grpc/grpc-all/1.7.0/grpc-all-1.7.0.jar +7faec93e2000-7faec93e6000 r--s 0003e000 00:2e 4851314 /home/honza/.m2/repository/jline/jline/2.14.3/jline-2.14.3.jar +7faec93e6000-7faec93fd000 r-xp 00000000 08:02 21638902 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libnet.so +7faec93fd000-7faec95fc000 ---p 00017000 08:02 21638902 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libnet.so +7faec95fc000-7faec95fd000 rw-p 00016000 08:02 21638902 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libnet.so +7faec95fd000-7faec97fd000 rw-p 00000000 00:00 0 +7faec97fd000-7faec9800000 ---p 00000000 00:00 0 +7faec9800000-7faec98fe000 rw-p 00000000 00:00 0 +7faec98fe000-7faec9901000 ---p 00000000 00:00 0 +7faec9901000-7faec99ff000 rw-p 00000000 00:00 0 +7faec99ff000-7faec9a08000 r-xp 00000000 08:02 21638910 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libmanagement.so +7faec9a08000-7faec9c07000 ---p 00009000 08:02 21638910 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libmanagement.so +7faec9c07000-7faec9c08000 rw-p 00008000 08:02 21638910 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libmanagement.so +7faec9c08000-7faec9e08000 rw-p 00000000 00:00 0 +7faec9e08000-7faec9e09000 r--s 00010000 08:02 21638745 /usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar +7faec9e09000-7faec9e9f000 r--s 01110000 08:02 21638742 /usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar +7faec9e9f000-7faec9ea1000 r--s 00001000 08:02 21638740 /usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar +7faec9ea1000-7faec9ea2000 r--s 0000a000 08:02 21638743 /usr/lib/jvm/java-8-oracle/jre/lib/ext/jaccess.jar +7faec9ea2000-7faec9ea5000 r--s 0003a000 08:02 21638746 /usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar +7faec9ea5000-7faec9ec1000 r--s 00393000 08:02 21638741 /usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar +7faec9ec1000-7faec9ecb000 r--s 00116000 08:02 21638748 /usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar +7faec9ecb000-7faec9ecd000 r--s 00009000 08:02 21638739 /usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar +7faec9ecd000-7faec9ee8000 r--s 001d3000 08:02 21638744 /usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar +7faec9ee8000-7faec9eed000 r--s 0003e000 08:02 21638749 /usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar +7faec9eed000-7faec9ef2000 r--s 00084000 08:02 21638597 /usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar +7faec9ef2000-7faec9ef7000 r--s 002f9000 08:02 21638678 /usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar +7faec9ef7000-7faec9efa000 r--s 0001a000 08:02 21638841 /usr/lib/jvm/java-8-oracle/jre/lib/jce.jar +7faec9efa000-7faec9eff000 r--s 0009a000 08:02 21638737 /usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar +7faec9eff000-7faec9f12000 r--s 00345000 08:02 21638718 /usr/lib/jvm/java-8-oracle/jre/lib/resources.jar +7faec9f12000-7faec9f14000 r--s 00001000 00:2e 12848239 /home/honza/.m2/repository/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar +7faec9f14000-7faec9f19000 r--s 00039000 00:2e 12845737 /home/honza/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.jar +7faec9f19000-7faec9f1b000 r--s 00004000 00:2e 12845637 /home/honza/.m2/repository/org/codehaus/plexus/plexus-resources/1.0-alpha-7/plexus-resources-1.0-alpha-7.jar +7faec9f1b000-7faec9f1d000 r--s 00008000 00:2e 3806699 /home/honza/.m2/repository/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar +7faec9f1d000-7faec9f24000 r--s 00029000 00:2e 12845397 /home/honza/.m2/repository/org/codehaus/plexus/plexus-container-default/1.0-alpha-9/plexus-container-default-1.0-alpha-9.jar +7faec9f24000-7faec9f27000 r--s 00013000 00:2e 12714727 /home/honza/.m2/repository/org/apache/maven/maven-model/2.0.6/maven-model-2.0.6.jar +7faec9f27000-7faec9f28000 r--s 00005000 00:2e 12715170 /home/honza/.m2/repository/org/apache/maven/maven-repository-metadata/2.0.6/maven-repository-metadata-2.0.6.jar +7faec9f28000-7faec9f2a000 r--s 0000c000 00:2e 12714513 /home/honza/.m2/repository/org/apache/maven/maven-artifact-manager/2.0.6/maven-artifact-manager-2.0.6.jar +7faec9f2a000-7faec9f2d000 r--s 00018000 00:2e 12059994 /home/honza/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar +7faec9f2d000-7faec9f2f000 r--s 00009000 00:2e 12716273 /home/honza/.m2/repository/org/apache/maven/shared/maven-doxia-tools/1.2.1/maven-doxia-tools-1.2.1.jar +7faec9f2f000-7faec9f3d000 r--s 0007f000 00:2e 12059876 /home/honza/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar +7faec9f3d000-7faec9f40000 r--s 0001b000 00:2e 12717136 /home/honza/.m2/repository/org/apache/struts/struts-tiles/1.3.8/struts-tiles-1.3.8.jar +7faec9f40000-7faec9f45000 r--s 00039000 00:2e 12717126 /home/honza/.m2/repository/org/apache/struts/struts-taglib/1.3.8/struts-taglib-1.3.8.jar +7faec9f45000-7faec9f4a000 r--s 00053000 00:2e 3151865 /home/honza/.m2/repository/antlr/antlr/2.7.2/antlr-2.7.2.jar +7faec9f4a000-7faec9f50000 r--s 0004b000 00:2e 12717115 /home/honza/.m2/repository/org/apache/struts/struts-core/1.3.8/struts-core-1.3.8.jar +7faec9f50000-7faec9f52000 r--s 00005000 00:2e 3151963 /home/honza/.m2/repository/sslext/sslext/1.2-0/sslext-1.2-0.jar +7faec9f52000-7faec9f54000 r--s 00014000 00:2e 3151925 /home/honza/.m2/repository/commons-chain/commons-chain/1.1/commons-chain-1.1.jar +7faec9f54000-7faec9f5a000 r--s 0004f000 00:2e 12717215 /home/honza/.m2/repository/org/apache/velocity/velocity-tools/2.0/velocity-tools-2.0.jar +7faec9f5a000-7faec9f62000 r--s 00058000 00:2e 12717220 /home/honza/.m2/repository/org/apache/velocity/velocity/1.5/velocity-1.5.jar +7faec9f62000-7faec9f63000 r--s 00001000 00:2e 12845829 /home/honza/.m2/repository/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.jar +7faec9f63000-7faec9f64000 r--s 00002000 00:2e 12845463 /home/honza/.m2/repository/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.jar +7faec9f64000-7faec9f66000 r--s 00008000 00:2e 12587656 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-module-fml/1.4/doxia-module-fml-1.4.jar +7faec9f66000-7faec9f67000 r--s 00003000 00:2e 12587711 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-module-xhtml/1.4/doxia-module-xhtml-1.4.jar +7faec9f67000-7faec9f69000 r--s 0000b000 00:2e 12714278 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-site-renderer/1.4/doxia-site-renderer-1.4.jar +7faec9f69000-7faec9f6a000 r--s 0000e000 00:2e 12587561 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-decoration-model/1.4/doxia-decoration-model-1.4.jar +7faec9f6a000-7faec9f6b000 r--s 00002000 00:2e 12714224 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.4/doxia-sink-api-1.4.jar +7faec9f6b000-7faec9f70000 r--s 00026000 00:2e 12586961 /home/honza/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar +7faec9f70000-7faec9f72000 r--s 0000a000 00:2e 3542235 /home/honza/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar +7faec9f72000-7faec9f79000 r--s 00041000 00:2e 12586799 /home/honza/.m2/repository/org/apache/httpcomponents/httpclient/4.0.2/httpclient-4.0.2.jar +7faec9f79000-7faec9f91000 r--s 00115000 00:2e 3279286 /home/honza/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar +7faec9f91000-7faec9f93000 r--s 00000000 00:2e 12845288 /home/honza/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar +7faec9f93000-7faec9f94000 r--s 00002000 00:2e 12587603 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-logging-api/1.4/doxia-logging-api-1.4.jar +7faec9f94000-7faec9f98000 r--s 00025000 00:2e 12587526 /home/honza/.m2/repository/org/apache/maven/doxia/doxia-core/1.4/doxia-core-1.4.jar +7faec9f98000-7faec9f9b000 r--s 00011000 00:2e 12714576 /home/honza/.m2/repository/org/apache/maven/maven-artifact/2.2.1/maven-artifact-2.2.1.jar +7faec9f9b000-7faec9f9d000 r--s 00008000 00:2e 12714986 /home/honza/.m2/repository/org/apache/maven/maven-plugin-descriptor/2.2.1/maven-plugin-descriptor-2.2.1.jar +7faec9f9d000-7faec9f9e000 r--s 00002000 00:2e 12714913 /home/honza/.m2/repository/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar +7faec9f9e000-7faec9fa0000 r--s 0000e000 00:2e 3016851 /home/honza/.m2/repository/oro/oro/2.0.8/oro-2.0.8.jar +7faec9fa0000-7faec9fa2000 r--s 00008000 00:2e 12060048 /home/honza/.m2/repository/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar +7faec9fa2000-7faec9fa6000 r--s 00026000 00:2e 12059930 /home/honza/.m2/repository/commons-digester/commons-digester/1.6/commons-digester-1.6.jar +7faec9fa6000-7faec9fab000 r--s 0002a000 00:2e 3016813 /home/honza/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar +7faec9fab000-7faec9fae000 r--s 00014000 00:2e 12060120 /home/honza/.m2/repository/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar +7faec9fae000-7faec9fb0000 r--s 00007000 00:2e 12845501 /home/honza/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.1/plexus-interpolation-1.1.jar +7faec9fb0000-7faec9fb2000 r--s 00006000 00:2e 12587734 /home/honza/.m2/repository/org/apache/maven/maven-plugin-registry/2.0.10/maven-plugin-registry-2.0.10.jar +7faec9fb2000-7faec9fb4000 r--s 00008000 00:2e 12715052 /home/honza/.m2/repository/org/apache/maven/maven-profile/2.0.10/maven-profile-2.0.10.jar +7faec9fb4000-7faec9fb6000 r--s 0000b000 00:2e 12715252 /home/honza/.m2/repository/org/apache/maven/maven-settings/2.0.10/maven-settings-2.0.10.jar +7faec9fb6000-7faec9fb9000 r--s 0001c000 00:2e 12715100 /home/honza/.m2/repository/org/apache/maven/maven-project/2.0.10/maven-project-2.0.10.jar +7faec9fb9000-7faec9fbb000 r--s 00003000 00:2e 12716006 /home/honza/.m2/repository/org/apache/maven/reporting/maven-reporting-impl/2.1/maven-reporting-impl-2.1.jar +7faec9fbb000-7faec9fbf000 r--s 00031000 00:2e 12717525 /home/honza/.m2/repository/org/codehaus/groovy/groovy-xml/2.4.7/groovy-xml-2.4.7.jar +7faec9fbf000-7faec9fc1000 r--s 0001b000 00:2e 12323760 /home/honza/.m2/repository/org/apache/ant/ant-junit/1.9.4/ant-junit-1.9.4.jar +7faec9fc1000-7faeca00e000 r--s 0040b000 00:2e 12717540 /home/honza/.m2/repository/org/codehaus/groovy/groovy/2.4.7/groovy-2.4.7.jar +7faeca00e000-7faeca00f000 ---p 00000000 00:00 0 +7faeca00f000-7faeca10f000 rw-p 00000000 00:00 0 +7faeca10f000-7faeca112000 ---p 00000000 00:00 0 +7faeca112000-7faeca210000 rw-p 00000000 00:00 0 +7faeca210000-7faeca213000 ---p 00000000 00:00 0 +7faeca213000-7faeca311000 rw-p 00000000 00:00 0 +7faeca311000-7faeca314000 ---p 00000000 00:00 0 +7faeca314000-7faeca412000 rw-p 00000000 00:00 0 +7faeca412000-7faeca415000 ---p 00000000 00:00 0 +7faeca415000-7faeca513000 rw-p 00000000 00:00 0 +7faeca513000-7faeca516000 ---p 00000000 00:00 0 +7faeca516000-7faeca614000 rw-p 00000000 00:00 0 +7faeca614000-7faeca617000 ---p 00000000 00:00 0 +7faeca617000-7faeca715000 rw-p 00000000 00:00 0 +7faeca715000-7faecb0f1000 r--p 00000000 08:02 21633841 /usr/lib/locale/locale-archive +7faecb0f1000-7faecb0f4000 ---p 00000000 00:00 0 +7faecb0f4000-7faecb1f2000 rw-p 00000000 00:00 0 +7faecb1f2000-7faecb1f5000 ---p 00000000 00:00 0 +7faecb1f5000-7faecb2f3000 rw-p 00000000 00:00 0 +7faecb2f3000-7faecb2f4000 ---p 00000000 00:00 0 +7faecb2f4000-7faecc000000 rw-p 00000000 00:00 0 +7faecc000000-7faecc021000 rw-p 00000000 00:00 0 +7faecc021000-7faed0000000 ---p 00000000 00:00 0 +7faed0000000-7faed0001000 r--s 00002000 00:2e 12715980 /home/honza/.m2/repository/org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.jar +7faed0001000-7faed0003000 r--s 00016000 00:2e 12717520 /home/honza/.m2/repository/org/codehaus/groovy/groovy-templates/2.4.7/groovy-templates-2.4.7.jar +7faed0003000-7faed0007000 r--s 0001e000 00:2e 12717510 /home/honza/.m2/repository/org/codehaus/groovy/groovy-groovydoc/2.4.7/groovy-groovydoc-2.4.7.jar +7faed0007000-7faed0008000 r--s 00002000 00:2e 12323755 /home/honza/.m2/repository/org/apache/ant/ant-antlr/1.9.4/ant-antlr-1.9.4.jar +7faed0008000-7faed000a000 r--s 00010000 00:2e 12717505 /home/honza/.m2/repository/org/codehaus/groovy/groovy-ant/2.4.7/groovy-ant-2.4.7.jar +7faed000a000-7faed000b000 r--s 00004000 00:2e 12323793 /home/honza/.m2/repository/org/apache/ant/ant-launcher/1.9.4/ant-launcher-1.9.4.jar +7faed000b000-7faed0029000 r--s 001cf000 00:2e 12323855 /home/honza/.m2/repository/org/apache/ant/ant/1.9.4/ant-1.9.4.jar +7faed0029000-7faed002f000 r--s 00033000 00:2e 3410478 /home/honza/.m2/repository/jaxen/jaxen/1.1.6/jaxen-1.1.6.jar +7faed002f000-7faed0030000 r--s 00002000 00:2e 4459437 /home/honza/.m2/repository/com/apple/AppleJavaExtensions/1.4/AppleJavaExtensions-1.4.jar +7faed0030000-7faed0035000 r--s 00041000 00:2e 12060035 /home/honza/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar +7faed0035000-7faed0037000 r--s 00006000 00:2e 12847531 /home/honza/.m2/repository/org/ow2/asm/asm-tree/5.0.2/asm-tree-5.0.2.jar +7faed0037000-7faed0039000 r--s 00009000 00:2e 12847434 /home/honza/.m2/repository/org/ow2/asm/asm-commons/5.0.2/asm-commons-5.0.2.jar +7faed0039000-7faed003e000 r--s 00058000 00:2e 12847462 /home/honza/.m2/repository/org/ow2/asm/asm-debug-all/5.0.2/asm-debug-all-5.0.2.jar +7faed003e000-7faed006d000 r--s 00371000 00:2e 8526383 /home/honza/.m2/repository/com/google/code/findbugs/findbugs/3.0.1/findbugs-3.0.1.jar +7faed006d000-7faed1000000 rw-p 00000000 00:00 0 +7faed1000000-7faed17d0000 rwxp 00000000 00:00 0 +7faed17d0000-7faee0000000 ---p 00000000 00:00 0 +7faee0000000-7faee1084000 rw-p 00000000 00:00 0 +7faee1084000-7faee4000000 ---p 00000000 00:00 0 +7faee4000000-7faee4005000 r--s 00016000 00:2e 3279296 /home/honza/.m2/repository/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar +7faee4005000-7faee400a000 r--s 00048000 00:2e 5244930 /home/honza/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar +7faee400a000-7faee400c000 r--s 00005000 00:2e 8654059 /home/honza/.m2/repository/com/google/code/findbugs/jFormatString/2.0.1/jFormatString-2.0.1.jar +7faee400c000-7faee4100000 rw-p 00000000 00:00 0 +7faee4100000-7faee42d9000 r--s 03d5a000 08:02 21638680 /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar +7faee42d9000-7faee5caa000 rw-p 00000000 00:00 0 +7faee5caa000-7faee5cab000 ---p 00000000 00:00 0 +7faee5cab000-7faee5dab000 rw-p 00000000 00:00 0 +7faee5dab000-7faee5dac000 ---p 00000000 00:00 0 +7faee5dac000-7faee5eac000 rw-p 00000000 00:00 0 +7faee5eac000-7faee5ead000 ---p 00000000 00:00 0 +7faee5ead000-7faee5fad000 rw-p 00000000 00:00 0 +7faee5fad000-7faee5fae000 ---p 00000000 00:00 0 +7faee5fae000-7faee60ae000 rw-p 00000000 00:00 0 +7faee60ae000-7faee60af000 ---p 00000000 00:00 0 +7faee60af000-7faee61af000 rw-p 00000000 00:00 0 +7faee61af000-7faee61b0000 ---p 00000000 00:00 0 +7faee61b0000-7faee62b0000 rw-p 00000000 00:00 0 +7faee62b0000-7faee62b1000 ---p 00000000 00:00 0 +7faee62b1000-7faee63b1000 rw-p 00000000 00:00 0 +7faee63b1000-7faee63b2000 ---p 00000000 00:00 0 +7faee63b2000-7faee6505000 rw-p 00000000 00:00 0 +7faee6505000-7faee655c000 ---p 00000000 00:00 0 +7faee655c000-7faee65b2000 rw-p 00000000 00:00 0 +7faee65b2000-7faee65d3000 rw-p 00000000 00:00 0 +7faee65d3000-7faee6973000 ---p 00000000 00:00 0 +7faee6973000-7faee698e000 r-xp 00000000 08:02 21638898 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libzip.so +7faee698e000-7faee6b8e000 ---p 0001b000 08:02 21638898 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libzip.so +7faee6b8e000-7faee6b8f000 rw-p 0001b000 08:02 21638898 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libzip.so +7faee6b8f000-7faee6b9a000 r-xp 00000000 08:02 12194332 /lib/x86_64-linux-gnu/libnss_files-2.23.so +7faee6b9a000-7faee6d99000 ---p 0000b000 08:02 12194332 /lib/x86_64-linux-gnu/libnss_files-2.23.so +7faee6d99000-7faee6d9a000 r--p 0000a000 08:02 12194332 /lib/x86_64-linux-gnu/libnss_files-2.23.so +7faee6d9a000-7faee6d9b000 rw-p 0000b000 08:02 12194332 /lib/x86_64-linux-gnu/libnss_files-2.23.so +7faee6d9b000-7faee6da1000 rw-p 00000000 00:00 0 +7faee6da1000-7faee6dac000 r-xp 00000000 08:02 12194342 /lib/x86_64-linux-gnu/libnss_nis-2.23.so +7faee6dac000-7faee6fab000 ---p 0000b000 08:02 12194342 /lib/x86_64-linux-gnu/libnss_nis-2.23.so +7faee6fab000-7faee6fac000 r--p 0000a000 08:02 12194342 /lib/x86_64-linux-gnu/libnss_nis-2.23.so +7faee6fac000-7faee6fad000 rw-p 0000b000 08:02 12194342 /lib/x86_64-linux-gnu/libnss_nis-2.23.so +7faee6fad000-7faee6fc3000 r-xp 00000000 08:02 12194326 /lib/x86_64-linux-gnu/libnsl-2.23.so +7faee6fc3000-7faee71c2000 ---p 00016000 08:02 12194326 /lib/x86_64-linux-gnu/libnsl-2.23.so +7faee71c2000-7faee71c3000 r--p 00015000 08:02 12194326 /lib/x86_64-linux-gnu/libnsl-2.23.so +7faee71c3000-7faee71c4000 rw-p 00016000 08:02 12194326 /lib/x86_64-linux-gnu/libnsl-2.23.so +7faee71c4000-7faee71c6000 rw-p 00000000 00:00 0 +7faee71c6000-7faee71ce000 r-xp 00000000 08:02 12194328 /lib/x86_64-linux-gnu/libnss_compat-2.23.so +7faee71ce000-7faee73cd000 ---p 00008000 08:02 12194328 /lib/x86_64-linux-gnu/libnss_compat-2.23.so +7faee73cd000-7faee73ce000 r--p 00007000 08:02 12194328 /lib/x86_64-linux-gnu/libnss_compat-2.23.so +7faee73ce000-7faee73cf000 rw-p 00008000 08:02 12194328 /lib/x86_64-linux-gnu/libnss_compat-2.23.so +7faee73cf000-7faee73fa000 r-xp 00000000 08:02 21638892 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libjava.so +7faee73fa000-7faee75f9000 ---p 0002b000 08:02 21638892 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libjava.so +7faee75f9000-7faee75fb000 rw-p 0002a000 08:02 21638892 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libjava.so +7faee75fb000-7faee7608000 r-xp 00000000 08:02 21638897 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libverify.so +7faee7608000-7faee7808000 ---p 0000d000 08:02 21638897 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libverify.so +7faee7808000-7faee780a000 rw-p 0000d000 08:02 21638897 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/libverify.so +7faee780a000-7faee7811000 r-xp 00000000 08:02 12194387 /lib/x86_64-linux-gnu/librt-2.23.so +7faee7811000-7faee7a10000 ---p 00007000 08:02 12194387 /lib/x86_64-linux-gnu/librt-2.23.so +7faee7a10000-7faee7a11000 r--p 00006000 08:02 12194387 /lib/x86_64-linux-gnu/librt-2.23.so +7faee7a11000-7faee7a12000 rw-p 00007000 08:02 12194387 /lib/x86_64-linux-gnu/librt-2.23.so +7faee7a12000-7faee7b1a000 r-xp 00000000 08:02 12194303 /lib/x86_64-linux-gnu/libm-2.23.so +7faee7b1a000-7faee7d19000 ---p 00108000 08:02 12194303 /lib/x86_64-linux-gnu/libm-2.23.so +7faee7d19000-7faee7d1a000 r--p 00107000 08:02 12194303 /lib/x86_64-linux-gnu/libm-2.23.so +7faee7d1a000-7faee7d1b000 rw-p 00108000 08:02 12194303 /lib/x86_64-linux-gnu/libm-2.23.so +7faee7d1b000-7faee89ee000 r-xp 00000000 08:02 21638875 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so +7faee89ee000-7faee8bed000 ---p 00cd3000 08:02 21638875 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so +7faee8bed000-7faee8cc7000 rw-p 00cd2000 08:02 21638875 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so +7faee8cc7000-7faee8d12000 rw-p 00000000 00:00 0 +7faee8d12000-7faee8ed2000 r-xp 00000000 08:02 12194233 /lib/x86_64-linux-gnu/libc-2.23.so +7faee8ed2000-7faee90d2000 ---p 001c0000 08:02 12194233 /lib/x86_64-linux-gnu/libc-2.23.so +7faee90d2000-7faee90d6000 r--p 001c0000 08:02 12194233 /lib/x86_64-linux-gnu/libc-2.23.so +7faee90d6000-7faee90d8000 rw-p 001c4000 08:02 12194233 /lib/x86_64-linux-gnu/libc-2.23.so +7faee90d8000-7faee90dc000 rw-p 00000000 00:00 0 +7faee90dc000-7faee90df000 r-xp 00000000 08:02 12194257 /lib/x86_64-linux-gnu/libdl-2.23.so +7faee90df000-7faee92de000 ---p 00003000 08:02 12194257 /lib/x86_64-linux-gnu/libdl-2.23.so +7faee92de000-7faee92df000 r--p 00002000 08:02 12194257 /lib/x86_64-linux-gnu/libdl-2.23.so +7faee92df000-7faee92e0000 rw-p 00003000 08:02 12194257 /lib/x86_64-linux-gnu/libdl-2.23.so +7faee92e0000-7faee92f6000 r-xp 00000000 08:02 21638870 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/jli/libjli.so +7faee92f6000-7faee94f5000 ---p 00016000 08:02 21638870 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/jli/libjli.so +7faee94f5000-7faee94f6000 rw-p 00015000 08:02 21638870 /usr/lib/jvm/java-8-oracle/jre/lib/amd64/jli/libjli.so +7faee94f6000-7faee950e000 r-xp 00000000 08:02 12194379 /lib/x86_64-linux-gnu/libpthread-2.23.so +7faee950e000-7faee970d000 ---p 00018000 08:02 12194379 /lib/x86_64-linux-gnu/libpthread-2.23.so +7faee970d000-7faee970e000 r--p 00017000 08:02 12194379 /lib/x86_64-linux-gnu/libpthread-2.23.so +7faee970e000-7faee970f000 rw-p 00018000 08:02 12194379 /lib/x86_64-linux-gnu/libpthread-2.23.so +7faee970f000-7faee9713000 rw-p 00000000 00:00 0 +7faee9713000-7faee9739000 r-xp 00000000 08:02 12194205 /lib/x86_64-linux-gnu/ld-2.23.so +7faee9739000-7faee9743000 r--s 0008c000 00:2e 7999487 /home/honza/.m2/repository/com/google/code/findbugs/bcel-findbugs/6.0/bcel-findbugs-6.0.jar +7faee9743000-7faee9745000 r--s 00006000 00:2e 8916971 /home/honza/.m2/repository/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.jar +7faee9745000-7faee97c0000 rw-p 00000000 00:00 0 +7faee97c0000-7faee9818000 ---p 00000000 00:00 0 +7faee9818000-7faee981b000 ---p 00000000 00:00 0 +7faee981b000-7faee991d000 rw-p 00000000 00:00 0 +7faee991d000-7faee991e000 r--s 0000c000 00:2e 12847586 /home/honza/.m2/repository/org/ow2/asm/asm/5.0.2/asm-5.0.2.jar +7faee991e000-7faee991f000 r--s 00000000 00:2e 12196294 /home/honza/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar +7faee991f000-7faee9922000 r--s 00021000 00:2e 12717699 /home/honza/.m2/repository/org/codehaus/mojo/findbugs-maven-plugin/3.0.4/findbugs-maven-plugin-3.0.4.jar +7faee9922000-7faee992c000 rw-p 00000000 00:00 0 +7faee992c000-7faee9934000 rw-s 00000000 08:02 6952209 /tmp/hsperfdata_honza/3559 +7faee9934000-7faee9935000 rw-p 00000000 00:00 0 +7faee9935000-7faee9936000 r--p 00000000 00:00 0 +7faee9936000-7faee9938000 rw-p 00000000 00:00 0 +7faee9938000-7faee9939000 r--p 00025000 08:02 12194205 /lib/x86_64-linux-gnu/ld-2.23.so +7faee9939000-7faee993a000 rw-p 00026000 08:02 12194205 /lib/x86_64-linux-gnu/ld-2.23.so +7faee993a000-7faee993b000 rw-p 00000000 00:00 0 +7fffbe04b000-7fffbe06e000 rw-p 00000000 00:00 0 [stack] +7fffbe100000-7fffbe102000 r--p 00000000 00:00 0 [vvar] +7fffbe102000-7fffbe104000 r-xp 00000000 00:00 0 [vdso] +ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] + +VM Arguments: +jvm_args: -Xmx512m -Dfile.encoding=UTF-8 +java_command: edu.umd.cs.findbugs.FindBugs2 -xml:withMessages -auxclasspathFromInput -projectName Proxima platform Tools -effort:default -medium -nested:false -maxRank 14 -output /home/honza/git/proxima/proxima-platform/tools/target/findbugsTemp.xml /home/honza/git/proxima/proxima-platform/tools/target/classes +java_class_path (initial): /home/honza/.m2/repository/org/codehaus/mojo/findbugs-maven-plugin/3.0.4/findbugs-maven-plugin-3.0.4.jar:/home/honza/.m2/repository/com/google/code/findbugs/findbugs/3.0.1/findbugs-3.0.1.jar:/home/honza/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/home/honza/.m2/repository/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.jar:/home/honza/.m2/repository/com/google/code/findbugs/bcel-findbugs/6.0/bcel-findbugs-6.0.jar:/home/honza/.m2/repository/com/google/code/findbugs/jFormatString/2.0.1/jFormatString-2.0.1.jar:/home/honza/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar:/home/honza/.m2/repository/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar:/home/honza/.m2/repository/org/ow2/asm/asm-debug-all/5.0.2/asm-debug-all-5.0.2.jar:/home/honza/.m2/repository/org/ow2/asm/asm-commons/5.0.2/asm-commons-5.0.2.jar:/home/honza/.m2/repository/org/ow2/asm/asm-tree/5.0.2/asm-tree-5.0.2.jar:/home/honza/.m2/repository/org/ow2/asm/asm/5.0.2/asm-5.0.2.jar:/home/honza/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar:/home/honza/.m2/repository/com/apple/AppleJavaExtensions/1.4/AppleJavaExtensions-1.4.jar:/home/honza/.m2/repository/jaxen/jaxen/1.1.6/jaxen-1.1.6.jar:/home/honza/.m2/repository/org/apache/ant/ant/1.9.4/ant-1.9.4.jar:/home/honza/.m2/repository/org/apache/ant/ant-launcher/1.9.4/ant-launcher-1.9.4.jar:/home/honza/.m2/repository/org/codehaus/groovy/groovy/2.4.7/groovy-2.4.7.jar:/home/honza/.m2/repository/org/codehaus/groovy/groovy-ant/2.4.7/groovy-ant-2.4.7.jar:/home/honza/.m2/repository/org/apache/ant/ant-antlr/1.9.4/ant-antlr-1.9.4.jar:/home/honza/.m2/repository/org/codehaus/groovy/groovy-groovydoc/2.4.7/groovy-groovydoc-2.4.7.jar:/home/honza/.m2/repository/org/codehaus/groovy/groovy-templates/2.4.7/groovy-templates-2.4.7.jar:/home/honza/.m2/repository/org/apache/ant/ant-junit/1.9.4/ant-junit-1.9.4.jar:/home/honza/.m2/repository/org/codehaus/groovy/groovy-xml/2.4.7/groovy-xml-2.4.7.jar:/home/honza/.m2/reposi +Launcher Type: SUN_STANDARD + +Environment Variables: +JAVA_HOME=/usr/lib/jvm/java-8-oracle +PATH=/home/honza/bin:/home/honza/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/home/honza/jdk1.8.0_111/bin/:/usr/local/go/bin/ +SHELL=/bin/bash +DISPLAY=:0 + +Signal Handlers: +SIGSEGV: [libjvm.so+0xacbe10], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGBUS: [libjvm.so+0xacbe10], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGFPE: [libjvm.so+0x924f90], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGPIPE: [libjvm.so+0x924f90], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGXFSZ: [libjvm.so+0x924f90], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGILL: [libjvm.so+0x924f90], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGUSR1: SIG_DFL, sa_mask[0]=00000000000000000000000000000000, sa_flags=none +SIGUSR2: [libjvm.so+0x9267d0], sa_mask[0]=00100000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO +SIGHUP: [libjvm.so+0x927bd0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGINT: [libjvm.so+0x927bd0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGTERM: [libjvm.so+0x927bd0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO +SIGQUIT: [libjvm.so+0x927bd0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO + + +--------------- S Y S T E M --------------- + +OS:DISTRIB_ID=Ubuntu +DISTRIB_RELEASE=16.04 +DISTRIB_CODENAME=xenial +DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS" + +uname:Linux 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64 +libc:glibc 2.23 NPTL 2.23 +rlimit: STACK 8192k, CORE 0k, NPROC 62254, NOFILE 1048576, AS infinity +load average:2.66 1.24 0.72 + +/proc/meminfo: +MemTotal: 16164152 kB +MemFree: 162356 kB +MemAvailable: 7646744 kB +Buffers: 479900 kB +Cached: 7602492 kB +SwapCached: 0 kB +Active: 9133752 kB +Inactive: 6164644 kB +Active(anon): 7218568 kB +Inactive(anon): 572960 kB +Active(file): 1915184 kB +Inactive(file): 5591684 kB +Unevictable: 32 kB +Mlocked: 32 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 11624 kB +Writeback: 0 kB +AnonPages: 6777364 kB +Mapped: 790300 kB +Shmem: 575780 kB +Slab: 543072 kB +SReclaimable: 316812 kB +SUnreclaim: 226260 kB +KernelStack: 15376 kB +PageTables: 54608 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 8082076 kB +Committed_AS: 14765464 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB +HardwareCorrupted: 0 kB +AnonHugePages: 3586048 kB +ShmemHugePages: 0 kB +ShmemPmdMapped: 0 kB +CmaTotal: 0 kB +CmaFree: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 224000 kB +DirectMap2M: 11044864 kB +DirectMap1G: 6291456 kB + + +CPU:total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 142 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx + +/proc/cpuinfo: +processor : 0 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2962.524 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 0 +cpu cores : 4 +apicid : 0 +initial apicid : 0 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 1 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2875.366 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 1 +cpu cores : 4 +apicid : 2 +initial apicid : 2 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 2 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2901.611 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 2 +cpu cores : 4 +apicid : 4 +initial apicid : 4 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 3 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2871.337 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 3 +cpu cores : 4 +apicid : 6 +initial apicid : 6 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 4 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2935.546 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 0 +cpu cores : 4 +apicid : 1 +initial apicid : 1 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 5 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2993.652 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 1 +cpu cores : 4 +apicid : 3 +initial apicid : 3 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 6 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2999.877 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 2 +cpu cores : 4 +apicid : 5 +initial apicid : 5 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + +processor : 7 +vendor_id : GenuineIntel +cpu family : 6 +model : 142 +model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz +stepping : 10 +microcode : 0x66 +cpu MHz : 2994.506 +cache size : 8192 KB +physical id : 0 +siblings : 8 +core id : 3 +cpu cores : 4 +apicid : 7 +initial apicid : 7 +fpu : yes +fpu_exception : yes +cpuid level : 22 +wp : yes +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp +bugs : +bogomips : 3984.00 +clflush size : 64 +cache_alignment : 64 +address sizes : 39 bits physical, 48 bits virtual +power management: + + + +Memory: 4k page, physical 16164152k(162356k free), swap 0k(0k free) + +vm_info: Java HotSpot(TM) 64-Bit Server VM (25.151-b12) for linux-amd64 JRE (1.8.0_151-b12), built on Sep 5 2017 19:20:58 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8) + +time: Wed Dec 13 14:15:42 2017 +elapsed time: 2 seconds (0d 0h 0m 2s) + diff --git a/tools/src/main/java/cz/o2/proxima/tools/groovy/Console.java b/tools/src/main/java/cz/o2/proxima/tools/groovy/Console.java index c1878eb19..ed2b99754 100644 --- a/tools/src/main/java/cz/o2/proxima/tools/groovy/Console.java +++ b/tools/src/main/java/cz/o2/proxima/tools/groovy/Console.java @@ -29,7 +29,6 @@ import cz.o2.proxima.repository.AttributeFamilyDescriptor; import cz.o2.proxima.repository.EntityDescriptor; import cz.o2.proxima.repository.Repository; -import cz.o2.proxima.storage.AttributeWriterBase; import cz.o2.proxima.storage.OnlineAttributeWriter; import cz.o2.proxima.storage.StorageType; import cz.o2.proxima.storage.StreamElement; @@ -129,11 +128,6 @@ public GroovyObject getEnv() throws Exception { repo); } - private static void usage() { - System.err.println(String.format("Usage %s []", Console.class.getName())); - System.exit(1); - } - private Repository getRepo(String[] paths) { Config config; if (paths.length > 0) { @@ -234,7 +228,7 @@ public WindowedStream> getBatchSnapshot( DatasetBuilder> builder = () -> { final Dataset> input; - AttributeFamilyDescriptor family = repo.getFamiliesForAttribute(attrDesc) + AttributeFamilyDescriptor family = repo.getFamiliesForAttribute(attrDesc) .stream() .filter(af -> af.getAccess().canReadBatchSnapshot()) .filter(af -> af.getBatchObservable().isPresent()) @@ -315,7 +309,7 @@ public WindowedStream> getBatchUpdates( long startStamp, long endStamp) { - AttributeFamilyDescriptor family = repo.getFamiliesForAttribute(attrDesc) + AttributeFamilyDescriptor family = repo.getFamiliesForAttribute(attrDesc) .stream() .filter(af -> af.getAccess().canReadBatchUpdates()) .filter(af -> af.getBatchObservable().isPresent()) @@ -382,7 +376,7 @@ public void put( TextFormat.merge(textFormat, builder); payload = builder.build().toByteArray(); } - Set> families = repo.getFamiliesForAttribute(attrDesc); + Set families = repo.getFamiliesForAttribute(attrDesc); OnlineAttributeWriter writer = families.stream() .filter(af -> af.getType() == StorageType.PRIMARY) .findAny() @@ -416,7 +410,7 @@ public void delete( EntityDescriptor entityDesc, AttributeDescriptor attrDesc, String key, String attribute) throws InterruptedException { - Set> families = repo.getFamiliesForAttribute(attrDesc); + Set families = repo.getFamiliesForAttribute(attrDesc); OnlineAttributeWriter writer = families.stream() .filter(af -> af.getType() == StorageType.PRIMARY) .findAny() diff --git a/tools/src/main/java/cz/o2/proxima/tools/io/BatchSource.java b/tools/src/main/java/cz/o2/proxima/tools/io/BatchSource.java index 04627a934..ff886960c 100644 --- a/tools/src/main/java/cz/o2/proxima/tools/io/BatchSource.java +++ b/tools/src/main/java/cz/o2/proxima/tools/io/BatchSource.java @@ -46,7 +46,7 @@ public class BatchSource implements DataSource> { public static BatchSource of( BatchLogObservable observable, - AttributeFamilyDescriptor family, + AttributeFamilyDescriptor family, long startStamp, long endStamp) { diff --git a/tools/src/main/java/cz/o2/proxima/tools/io/ConsoleRandomReader.java b/tools/src/main/java/cz/o2/proxima/tools/io/ConsoleRandomReader.java index e7d8dcd27..533eba18f 100644 --- a/tools/src/main/java/cz/o2/proxima/tools/io/ConsoleRandomReader.java +++ b/tools/src/main/java/cz/o2/proxima/tools/io/ConsoleRandomReader.java @@ -53,11 +53,10 @@ public ConsoleRandomReader(EntityDescriptor desc, Repository repo) { this.listEntityOffsets = new HashMap<>(); desc.getAllAttributes().forEach(f -> { - Optional> randomFamily; + Optional randomFamily; randomFamily = repo.getFamiliesForAttribute(f) .stream() - .filter(af -> af.getAccess().isListPrimaryKey() - && af.getAccess().canRandomRead()) + .filter(af -> af.getAccess().canRandomRead()) .findAny(); if (randomFamily.isPresent()) { attrToReader.put(f, randomFamily.get().getRandomAccessReader().get());