Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Accumulo, mail # dev - Can Mutation.readFields return Mutation instead fo void?


Copy link to this message
-
Re: Can Mutation.readFields return Mutation instead fo void?
Keith Turner 2012-09-11, 15:59
David,

Could you use org.apache.hadoop.io.WritableUtils.clone() or
org.apache.hadoop.io.WritableUtils.cloneInto()?

Keith

On Tue, Sep 11, 2012 at 11:38 AM, David Medinets
<[EMAIL PROTECTED]> wrote:
> I want to add this constructor:
>
>   public Mutation(DataInput in) {
>     try {
>                 readFields(in);
>         } catch (IOException e) {
>                 throw new RuntimeException(e);
>         }
>   }
>
> And use it like this:
>
>   private Mutation cloneMutation(Mutation m) throws IOException {
>     ByteArrayOutputStream baos = new ByteArrayOutputStream();
>     DataOutputStream dos = new DataOutputStream(baos);
>     m.write(dos);
>     dos.close();
>
>     ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
>     DataInputStream dis = new DataInputStream(bais);
>
>     return new Mutation(dis);
>   }
>
> Does anything look wrong?
>
> Should theose InputStreams be closed inside a finally clause?
>
>
> On Tue, Sep 11, 2012 at 9:41 AM, Billie Rinaldi <[EMAIL PROTECTED]> wrote:
>> On Tue, Sep 11, 2012 at 9:31 AM, David Medinets <[EMAIL PROTECTED]>wrote:
>>
>>> I am looking to simplify some. Here is the code I am looking at:
>>>
>>>   private Mutation cloneMutation(Mutation m) throws IOException {
>>>     ByteArrayOutputStream baos = new ByteArrayOutputStream();
>>>     DataOutputStream dos = new DataOutputStream(baos);
>>>     m.write(dos);
>>>     dos.close();
>>>
>>>     ByteArrayInputStream bais = new
>>> ByteArrayInputStream(baos.toByteArray());
>>>     DataInputStream dis = new DataInputStream(bais);
>>>
>>>     Mutation m = new Mutation();
>>>     m.readFields(dis);
>>>     return m;
>>>   }
>>>
>>> The readFields method in Mutation starts like this:
>>>
>>>   @Override
>>>   public void readFields(DataInput in) throws IOException {
>>>   ...
>>>   }
>>>
>>> It seems harmless to have readFields return 'this' instead fo void.
>>> Any objections?
>>>
>>> On a slightly different note, it seems like readFields should actually
>>> be a constructor. Because it's job is to set the row, data, value, and
>>> entries. Just as the other constructors do. Any objections to
>>> converting it to a constructor.
>>>
>>
>> That readFields method is inherited from Writable, so you can't change it.
>> When I made IteratorSetting extend Writable recently, I thought it would be
>> nice to have a constructor IteratorSetting(DataInput din) that calls
>> readFields, so I added it.  I wouldn't be opposed to adding such a
>> constructor to Mutation.
>>
>> Billie