@Override public void fromData(DataInput in) throws IOException, ClassNotFoundException { super.fromData(in); byte flag = in.readByte(); if (flag != NO_PARTITION) { this.configuredMaxMemory = in.readLong(); this.size = in.readLong(); this.bucketCount = in.readInt(); this.primaryCount = in.readInt(); if (flag == OK_INTERNAL) { this.prLoad = PRLoad.createFromDataInput(in); this.bucketSizes = DataSerializer.readLongArray(in); this.offlineDetails = new OfflineMemberDetailsImpl(); InternalDataSerializer.invokeFromData(this.offlineDetails, in); } } }
public void testSerialization() throws Exception { Set<PersistentMemberID>[] offlineMembers = new Set[5]; for(int i =0; i < offlineMembers.length; i++) { offlineMembers[i] = new HashSet<PersistentMemberID>(); offlineMembers[i].add(new PersistentMemberID(DiskStoreID.random(), InetAddress.getLocalHost(), "a", System.currentTimeMillis(),(short)0)); } OfflineMemberDetailsImpl details = new OfflineMemberDetailsImpl(offlineMembers ); ByteArrayOutputStream boas = new ByteArrayOutputStream(); DataOutput out = new DataOutputStream(boas); details.toData(out); OfflineMemberDetailsImpl details2 = new OfflineMemberDetailsImpl(); details2.fromData(new DataInputStream(new ByteArrayInputStream(boas.toByteArray()))); }
@Override public void fromData(DataInput in) throws IOException, ClassNotFoundException { super.fromData(in); byte flag = in.readByte(); if (flag != NO_PARTITION) { this.configuredMaxMemory = in.readLong(); this.size = in.readLong(); this.bucketCount = in.readInt(); this.primaryCount = in.readInt(); if (flag == OK_INTERNAL) { this.prLoad = PRLoad.createFromDataInput(in); this.bucketSizes = DataSerializer.readLongArray(in); this.offlineDetails = new OfflineMemberDetailsImpl(); InternalDataSerializer.invokeFromData(this.offlineDetails, in); } } }
@Test public void testRebalancingWithOfflineMembers() throws Exception { PartitionedRegionLoadModel model = new PartitionedRegionLoadModel(bucketOperator ,1, 6, getAddressComparor(false), Collections.<InternalDistributedMember>emptySet(), null); InternalDistributedMember member1 = new InternalDistributedMember(InetAddress.getByName("127.0.0.1"), 1); InternalDistributedMember member2 = new InternalDistributedMember(InetAddress.getByName("127.0.0.1"), 2); PartitionMemberInfoImpl details1 = buildDetails(member1, 480, 480, new long[] {1,1,1,1,1,1}, new long[] {1,1,1,1,1,1}); PartitionMemberInfoImpl details2 = buildDetails(member2, 480, 480, new long[] {0,0,0,0,0,0}, new long[] {0,0,0,0,0,0}); //Each bucket has an offline member Set<PersistentMemberID> o = Collections.singleton(new PersistentMemberID()); Set<PersistentMemberID> x = Collections.emptySet(); final OfflineMemberDetailsImpl offlineDetails = new OfflineMemberDetailsImpl(new Set[] {o, o, o, o, o, o} ); model.addRegion("primary", Arrays.asList(details1, details2), offlineDetails, true); assertEquals(3, doMoves(new CompositeDirector(true, true, true, true), model)); List<Move> expectedMoves = new ArrayList<Move>(); expectedMoves.add(new Move(member1, member2)); expectedMoves.add(new Move(member1, member2)); expectedMoves.add(new Move(member1, member2)); assertEquals(expectedMoves, bucketOperator.bucketMoves); }
final OfflineMemberDetailsImpl offlineDetails = new OfflineMemberDetailsImpl(new Set[] {x, x, o, o, x} );
/** * Retrieve the set of members which are currently offline * for all buckets. */ public OfflineMemberDetailsImpl fetchOfflineMembers() { ProxyBucketRegion[] proxyBuckets = prRegion.getRegionAdvisor().getProxyBucketArray(); Set<PersistentMemberID>[] offlineMembers = new Set[proxyBuckets.length]; for(int i =0; i < proxyBuckets.length; i++) { ProxyBucketRegion proxy = proxyBuckets[i]; if(this.prRegion.getDataPolicy().withPersistence()) { Set<PersistentMemberID> persistedMembers = proxy.getPersistenceAdvisor().getMissingMembers(); if(persistedMembers == null) { persistedMembers = Collections.emptySet(); } offlineMembers[i] = persistedMembers; } else { offlineMembers[i] = Collections.emptySet(); } } return new OfflineMemberDetailsImpl(offlineMembers); }
/** * Retrieve the set of members which are currently offline * for all buckets. */ public OfflineMemberDetailsImpl fetchOfflineMembers() { ProxyBucketRegion[] proxyBuckets = prRegion.getRegionAdvisor().getProxyBucketArray(); Set<PersistentMemberID>[] offlineMembers = new Set[proxyBuckets.length]; for(int i =0; i < proxyBuckets.length; i++) { ProxyBucketRegion proxy = proxyBuckets[i]; if(this.prRegion.getDataPolicy().withPersistence()) { Set<PersistentMemberID> persistedMembers = proxy.getPersistenceAdvisor().getMissingMembers(); if(persistedMembers == null) { persistedMembers = Collections.emptySet(); } offlineMembers[i] = persistedMembers; } else { offlineMembers[i] = Collections.emptySet(); } } return new OfflineMemberDetailsImpl(offlineMembers); }
@Override protected final boolean operateOnPartitionedRegion(DistributionManager dm, PartitionedRegion region, long startTime) throws ForceReattemptException { PartitionMemberInfoImpl details = (PartitionMemberInfoImpl) region.getRedundancyProvider().buildPartitionMemberDetails( this.internal, this.loadProbe); OfflineMemberDetails offlineDetails; if(this.internal && this.fetchOfflineMembers) { offlineDetails = region.getRedundancyProvider().fetchOfflineMembers(); } else { offlineDetails = new OfflineMemberDetailsImpl(new Set[0]); } region.getPrStats().endPartitionMessagesProcessing(startTime); FetchPartitionDetailsReplyMessage.send( getSender(), getProcessorId(), details, dm, offlineDetails, null); // Unless there was an exception thrown, this message handles sending the // response return false; }
@Override protected final boolean operateOnPartitionedRegion(DistributionManager dm, PartitionedRegion region, long startTime) throws ForceReattemptException { PartitionMemberInfoImpl details = (PartitionMemberInfoImpl) region.getRedundancyProvider().buildPartitionMemberDetails( this.internal, this.loadProbe); OfflineMemberDetails offlineDetails; if(this.internal && this.fetchOfflineMembers) { offlineDetails = region.getRedundancyProvider().fetchOfflineMembers(); } else { offlineDetails = new OfflineMemberDetailsImpl(new Set[0]); } region.getPrStats().endPartitionMessagesProcessing(startTime); FetchPartitionDetailsReplyMessage.send( getSender(), getProcessorId(), details, dm, offlineDetails, null); // Unless there was an exception thrown, this message handles sending the // response return false; }