Project

General

Profile

« Previous | Next » 

Revision 6676

Use Subject.equals() when comparing DNs rather than CertificateManager.equalsDN(). Don't lock the pid in isNodeAuthorized() to debug for timeout issues. Minor debugging changes.

View differences:

src/edu/ucsb/nceas/metacat/dataone/CNodeService.java
23 23

  
24 24
package edu.ucsb.nceas.metacat.dataone;
25 25

  
26
import java.io.IOException;
27 26
import java.io.InputStream;
28 27
import java.math.BigInteger;
29 28
import java.util.Calendar;
......
33 32

  
34 33
import javax.servlet.http.HttpServletRequest;
35 34

  
36
import org.apache.commons.io.IOUtils;
37 35
import org.apache.log4j.Logger;
38 36
import org.dataone.client.CNode;
39 37
import org.dataone.client.D1Client;
40
import org.dataone.client.auth.CertificateManager;
41 38
import org.dataone.service.cn.v1.CNAuthorization;
42 39
import org.dataone.service.cn.v1.CNCore;
43 40
import org.dataone.service.cn.v1.CNRead;
......
71 68
import org.dataone.service.types.v1.Session;
72 69
import org.dataone.service.types.v1.Subject;
73 70
import org.dataone.service.types.v1.SystemMetadata;
74
import org.dataone.service.types.v1.util.ChecksumUtil;
75
import org.dataone.service.util.Constants;
76 71

  
77
import com.hazelcast.query.SqlPredicate;
78

  
79 72
import edu.ucsb.nceas.metacat.EventLog;
80 73
import edu.ucsb.nceas.metacat.IdentifierManager;
81
import edu.ucsb.nceas.metacat.McdbDocNotFoundException;
82 74
import edu.ucsb.nceas.metacat.dataone.hazelcast.HazelcastService;
83
import edu.ucsb.nceas.utilities.Log;
84 75

  
85 76
/**
86 77
 * Represents Metacat's implementation of the DataONE Coordinating Node 
......
150 141
          // does the request have the most current system metadata?
151 142
          if ( systemMetadata.getSerialVersion().longValue() != serialVersion ) {
152 143
             String msg = "The requested system metadata version number " + 
153
                 serialVersion + "differs from the current version at " +
144
                 serialVersion + " differs from the current version at " +
154 145
                 systemMetadata.getSerialVersion().longValue() +
155
                 " Please get the latest copy in order to modify it.";
146
                 ". Please get the latest copy in order to modify it.";
156 147
             throw new InvalidRequest("4883", msg);
157 148
          }
158 149
          
......
210 201
      List<Replica> replicas = null;
211 202
      // get the subject
212 203
      Subject subject = session.getSubject();
204
      logMetacat.debug("ReplicationStatus for identifier " + pid.getValue() +
205
          " is " + status.toString());
213 206
      
214 207
      SystemMetadata systemMetadata = null;
215 208
      try {      
......
225 218
          
226 219
          if ( replicas == null || replicas.size() < 1 ) {
227 220
              logMetacat.debug("no replicas to evaluate");
221
              throw new InvalidRequest("4730", "There are no replicas to update.");
228 222
              
229 223
          }
230 224

  
......
260 254
                  
261 255
                  // check if the session subject is in the node subject list
262 256
                  for (Subject nodeSubject : nodeSubjects) {
263
                      if ( CertificateManager.getInstance().equalsDN(
264
                              nodeSubject.getValue(), subject.getValue()) ) {
257
                      if ( nodeSubject.equals(subject) ) {
265 258
                          allowed = true; // subject of session == target node subject
266 259
                          break;
267 260
                          
......
282 275
          // does the request have the most current system metadata?
283 276
          if ( systemMetadata.getSerialVersion().longValue() != serialVersion ) {
284 277
             String msg = "The requested system metadata version number " + 
285
                 serialVersion + "differs from the current version at " +
278
                 serialVersion + " differs from the current version at " +
286 279
                 systemMetadata.getSerialVersion().longValue() +
287
                 " Please get the latest copy in order to modify it.";
280
                 ". Please get the latest copy in order to modify it.";
288 281
             throw new InvalidRequest("4730", msg);
289 282
          }
290 283
          
291
      } catch (Exception e) { // Catch is generic since HZ throws RuntimeException
284
      } catch (RuntimeException e) { // Catch is generic since HZ throws RuntimeException
292 285
        throw new NotFound("4740", "No record found for: " + pid.getValue() +
293 286
            " : " + e.getMessage());
294 287
        
295 288
      }
296 289
          
297 290
      // set the status for the replica
298
      if ( replicaEntryIndex != -1 ) {          
299
          replicas.get(replicaEntryIndex).setReplicationStatus(status);
291
      if ( replicaEntryIndex != -1 ) {
292
          Replica targetReplica = replicas.get(replicaEntryIndex);
293
          targetReplica.setReplicationStatus(status);
294
          logMetacat.debug("Set the replication status for " + 
295
              targetReplica.getReplicaMemberNode().getValue() + " to " +
296
              targetReplica.getReplicationStatus());
300 297
          
298
      } else {
299
          throw new InvalidRequest("4730", "There are no replicas to update.");
300

  
301 301
      }
302
      
303
      systemMetadata.setReplicaList(replicas);
302 304
            
303 305
      // update the metadata
304 306
      try {
......
792 794
          // does the request have the most current system metadata?
793 795
          if ( systemMetadata.getSerialVersion().longValue() != serialVersion ) {
794 796
             String msg = "The requested system metadata version number " + 
795
                 serialVersion + "differs from the current version at " +
797
                 serialVersion + " differs from the current version at " +
796 798
                 systemMetadata.getSerialVersion().longValue() +
797
                 " Please get the latest copy in order to modify it.";
799
                 ". Please get the latest copy in order to modify it.";
798 800
             throw new InvalidRequest("4442", msg);
799 801
          }
800 802
          
......
861 863
            
862 864
            for (Subject nodeSubject : node.getSubjectList()) {
863 865
                
864
                if ( CertificateManager.getInstance().equalsDN(nodeSubject.getValue(), targetNodeSubject.getValue())) {
866
                if ( nodeSubject.equals(targetNodeSubject) ) {
865 867
                    targetNode = node.getIdentifier();
866 868
                    logMetacat.debug("targetNode is : " + targetNode.getValue());
867 869
                    break;
......
878 880
          
879 881
      }
880 882
      //lock, get, and unlock the pid
881
      HazelcastService.getInstance().getSystemMetadataMap().lock(pid);
883
      //HazelcastService.getInstance().getSystemMetadataMap().lock(pid);
882 884
      logMetacat.debug("Getting system metadata for identifier " + pid.getValue());
883 885
      
884 886
      sysmeta = HazelcastService.getInstance().getSystemMetadataMap().get(pid);
......
993 995
              throw new NotAuthorized("1100", msg);
994 996
          }
995 997
          
996
      } catch (Exception e) {
998
      } catch (RuntimeException e) {
997 999
          // Convert Hazelcast runtime exceptions to service failures
998 1000
          String msg = "There was a problem creating the object identified by " +
999 1001
              pid.getValue() + ". There error message was: " + e.getMessage();
1002
          throw new ServiceFailure("4893", msg);
1000 1003
          
1001 1004
      } finally {
1002 1005
          HazelcastService.getInstance().getSystemMetadataMap().unlock(pid);
......
1047 1050
          // does the request have the most current system metadata?
1048 1051
          if ( systemMetadata.getSerialVersion().longValue() != serialVersion ) {
1049 1052
             String msg = "The requested system metadata version number " + 
1050
                 serialVersion + "differs from the current version at " +
1053
                 serialVersion + " differs from the current version at " +
1051 1054
                 systemMetadata.getSerialVersion().longValue() +
1052
                 " Please get the latest copy in order to modify it.";
1055
                 ". Please get the latest copy in order to modify it.";
1053 1056
             throw new InvalidRequest("4402", msg);
1054 1057
          }
1055 1058
          
......
1128 1131
          // does the request have the most current system metadata?
1129 1132
          if ( systemMetadata.getSerialVersion().longValue() != serialVersion ) {
1130 1133
             String msg = "The requested system metadata version number " + 
1131
                 serialVersion + "differs from the current version at " +
1134
                 serialVersion + " differs from the current version at " +
1132 1135
                 systemMetadata.getSerialVersion().longValue() +
1133
                 " Please get the latest copy in order to modify it.";
1136
                 ". Please get the latest copy in order to modify it.";
1134 1137
             throw new InvalidRequest("4853", msg);
1135 1138
          }
1136 1139
          

Also available in: Unified diff