Coverage Report - org.apache.giraph.mapping.DefaultEmbeddedLongByteOps
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultEmbeddedLongByteOps
0%
0/14
0%
0/2
1.4
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 package org.apache.giraph.mapping;
 20  
 
 21  
 import org.apache.hadoop.io.LongWritable;
 22  
 
 23  
 /**
 24  
  * MappingStoreOps implementation used to embed target information into
 25  
  * vertex id. Stores information in the higher order bits of the long id
 26  
  */
 27  0
 public class DefaultEmbeddedLongByteOps extends AbstractLongByteOps {
 28  
   /** Bit mask for first 9 bits in a long */
 29  
   private static final long MASK = ((long) 0x1FF) << 55;
 30  
   /** Inverse of MASK */
 31  
   private static final long IMASK = ~ MASK;
 32  
 
 33  
   /**
 34  
    * Default constructor (do not use)
 35  
    */
 36  0
   public DefaultEmbeddedLongByteOps() {
 37  0
   }
 38  
 
 39  
   @Override
 40  
   public boolean hasEmbedding() {
 41  0
     return true;
 42  
   }
 43  
 
 44  
   @Override
 45  
   public void embedTargetInfo(LongWritable id) {
 46  0
     if ((id.get() & MASK) != 0) {
 47  0
       throw new IllegalStateException("Expected first 9 bits of long " +
 48  
           " to be empty");
 49  
     }
 50  0
     byte target = mappingStore.getByteTarget(id);
 51  
     // first bit = 0 & rest 8 bits set to target
 52  
     // add 1 to distinguish between not set and assignment to worker-0
 53  
     // (prefix bits = 0 can mean one of two things :
 54  
     // no entry in the mapping, in which case target = -1, so -1 + 1 = 0
 55  
     // vertex is created later during computation, so prefix bits are 0 anyway)
 56  0
     long maskValue = ((1L + target) & 0xFF) << 55;
 57  0
     id.set(id.get() | maskValue);
 58  0
   }
 59  
 
 60  
   @Override
 61  
   public void removeTargetInfo(LongWritable id) {
 62  0
     id.set(id.get() & IMASK);
 63  0
   }
 64  
 
 65  
   @Override
 66  
   public int getPartition(LongWritable id, int partitionCount,
 67  
     int workerCount) {
 68  
     // extract last 8 bits
 69  
     // subtract 1 since added 1 during embedInfo (unset = -1)
 70  0
     byte target = (byte) (((id.get() >>> 55) & 0xFF) - 1);
 71  0
     return computePartition(id, partitionCount, workerCount, target);
 72  
   }
 73  
 }