Yes, in the same thread.

File list is not empty, because after samza job shutdown, all files in writing 
are not in complete state.

————————
Qi Shu

> 在 2017年8月24日,15:00,Jagadish Venkatraman <jagadish1...@gmail.com> 写道:
> 
>>>        Now the problem is not program hang, but the container quit
> before the “closeFiles” method executed completely.
> 
> It's unlikely that the container quit without returning from *close*. Are
> you sure there were filesList is not empty? I'd suggest adding more logging.
> 
> I'm assuming you are calling *closeFiles* in the same thread?
> 
> On Wed, Aug 23, 2017 at 11:53 PM, 舒琦 <sh...@eefung.com> wrote:
> 
>> Hi Jagadish,
>> 
>>        When samza job is shutdown, “Begin to stop” is printed out in the
>> log file, but not the log in closeFiles.
>>        Now the problem is not program hang, but the container quit before
>> the “closeFiles” method executed completely.
>> 
>>        Thanks.
>> 
>> ————————
>> Qi Shu
>> 
>>> 在 2017年8月24日,14:44,Jagadish Venkatraman <jagadish1...@gmail.com> 写道:
>>> 
>>> Is "Begin to close file" printed? Where exactly is your application
>> stalled
>>> ? I'd suggest you take a stack dump.
>>> 
>>> On Wed, Aug 23, 2017 at 11:32 PM, 舒琦 <sh...@eefung.com> wrote:
>>> 
>>>> Hi Jagadish,
>>>> 
>>>>       Below is part of the related code, log “"Begin to stop” is
>> printed
>>>> out.
>>>> 
>>>>       Thank you!
>>>> 
>>>> public abstract class MyProducer implements SystemProducer {
>>>> 
>>>>   @Override
>>>>   public void stop() {
>>>>       LOGGER.info("Begin to stop");
>>>> 
>>>>       closeFiles();
>>>> 
>>>>       LOGGER.info("End to stop");
>>>>   }
>>>> 
>>>>   @Override
>>>>   protected void closeFiles() throws IOException {
>>>>       closeFiles(statusFiles);
>>>>       closeFiles(interactionFiles);
>>>>   }
>>>> 
>>>>   private void closeFiles(Map<String, FileInWriting> files) throws
>>>> IOException {
>>>>       for (FileInWriting statusFile : files.values()) {
>>>>           LOGGER.info("Begin to close file: {}",
>>>> statusFile.getFilePath());
>>>>           statusFile.getWriter().hflush();
>>>>           statusFile.getWriter().close();
>>>>           renameFile(statusFile.getFilePath());
>>>>           LOGGER.info("Successfully close file: {}",
>>>> statusFile.getFilePath());
>>>>       }
>>>> 
>>>>       files.clear();
>>>>   }
>>>> 
>>>> }
>>>> 
>>>> 
>>>> ————————
>>>> Qi Shu
>>>> 
>>>>> 在 2017年8月24日,14:21,Jagadish Venkatraman <jagadish1...@gmail.com> 写道:
>>>>> 
>>>>> Hi Qi,
>>>>> 
>>>>>>> the stop method in SystemProducer is called, but the close files
>>>>> operation(may need some time, there may be cache data to be flushed) in
>>>>> stop method is not executed completely
>>>>> 
>>>>> Are you seeing the *close()* method hang? SystemProducer.*close* is a
>>>>> synchronous operation, and will block for the *close* method to finish.
>>>>> 
>>>>> Best,
>>>>> Jagadish
>>>>> 
>>>>> On Wed, Aug 23, 2017 at 11:17 PM, 舒琦 <sh...@eefung.com> wrote:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>>      I write a SystemProducer for HDFS and everything is fine. When
>>>>>> samza job is shutdown, the stop method in SystemProducer is called,
>> but
>>>> the
>>>>>> close files operation(may need some time, there may be cache data to
>> be
>>>>>> flushed) in stop method is not executed completely.
>>>>>> 
>>>>>>      How can I resolve this problem?
>>>>>> 
>>>>>>      Thanks!
>>>>>> 
>>>>>> ————————
>>>>>> Qi Shu
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Jagadish V,
>>>>> Graduate Student,
>>>>> Department of Computer Science,
>>>>> Stanford University
>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> Jagadish V,
>>> Graduate Student,
>>> Department of Computer Science,
>>> Stanford University
>> 
>> 
> 
> 
> -- 
> Jagadish V,
> Graduate Student,
> Department of Computer Science,
> Stanford University

Reply via email to