blob: 89016edca2f274d0e4698bf9ee5bf65cceeacf87 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You 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 org.apache.geode.distributed.internal.membership.adapter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.geode.distributed.internal.DistributionMessage;
import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
import org.apache.geode.distributed.internal.OperationExecutors;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.distributed.internal.membership.gms.api.MemberIdentifier;
import org.apache.geode.distributed.internal.membership.gms.interfaces.GMSMessage;
import org.apache.geode.internal.cache.DirectReplyMessage;
import org.apache.geode.internal.serialization.DataSerializableFixedID;
/**
* GMSMessageAdapter wraps a Geode DistributionMessage to be sent via the GMS Messenger (JGroups)
*/
public class GMSMessageAdapter implements GMSMessage {
DistributionMessage geodeMessage;
public GMSMessageAdapter(DistributionMessage geodeMessage) {
this.geodeMessage = geodeMessage;
}
@Override
public void setRecipient(MemberIdentifier member) {
geodeMessage.setRecipient((InternalDistributedMember) member);
}
@Override
public void setRecipients(List<MemberIdentifier> recipients) {
throw new UnsupportedOperationException(
"setting recipients is not allowed on a message wrapper");
}
@Override
public boolean isHighPriority() {
return geodeMessage instanceof HighPriorityDistributionMessage ||
geodeMessage.getProcessorType() == OperationExecutors.HIGH_PRIORITY_EXECUTOR;
}
@Override
public void registerProcessor() {
if (geodeMessage instanceof DirectReplyMessage) {
((DirectReplyMessage) geodeMessage).registerProcessor();
}
}
@Override
public List<MemberIdentifier> getRecipients() {
InternalDistributedMember[] recipients = geodeMessage.getRecipients();
if (recipients == null
|| recipients.length == 1 && recipients[0] == DistributionMessage.ALL_RECIPIENTS) {
return Collections.singletonList(null);
}
return Arrays.asList(recipients);
}
@Override
public int getDSFID() {
return geodeMessage.getDSFID();
}
@Override
public boolean forAll() {
return geodeMessage.forAll();
}
@Override
public boolean getMulticast() {
return geodeMessage.getMulticast();
}
@Override
public void setMulticast(boolean useMulticast) {
geodeMessage.setMulticast(useMulticast);
}
@Override
public void setSender(MemberIdentifier sender) {
geodeMessage.setSender((InternalDistributedMember) sender);
}
@Override
public MemberIdentifier getSender() {
return geodeMessage.getSender();
}
@Override
public void resetTimestamp() {
geodeMessage.resetTimestamp();
}
@Override
public void setBytesRead(int amount) {
geodeMessage.setBytesRead(amount);
}
@Override
public String toString() {
return geodeMessage.toString();
}
DataSerializableFixedID getGeodeMessage() {
return geodeMessage;
}
}