The Glossina hytrosavirus (family Hytrosaviridae) is a double-stranded DNA virus with rod-shaped, enveloped virions. Its 190 kbp genome encodes 160 putative open reading frames. The virus replicates in the nucleus, and acquires a fragile envelope in the cell cytoplasm. Glossina hytrosavirus was first isolated from hypertrophied salivary glands of the tsetse fly, Glossina pallidipes Austen (Diptera; Glossinidae) collected in Kenya in 1986. A certain proportion of laboratory G. pallidipes flies infected by Glossina hytrosavirus develop hypertrophied salivary glands and midgut epithelial cells, gonadal anomalies and distorted sex-ratios associated with reduced insemination rates, fecundity and lifespan. These symptoms are rare in wild tsetse populations. In East Africa, G. pallidipes is one of the most important vectors of African trypanosomosis, a debilitating zoonotic disease that afflicts 37 sub-Saharan African countries. There is a large arsenal of control tactics available to manage tsetse flies and the disease they transmit. The sterile insect technique (SIT) is a robust control tactic that has shown to be effective in eradicating tsetse populations when integrated with other control tactics in an area-wide integrated approach. The SIT requires production of sterile male flies in large production facilities. To supply sufficient numbers of sterile males for the SIT component against G. pallidipes, strategies have to be developed that enable the management of the Glossina hytrosavirus in the colonies. This review provides a historic chronology of the emergence and biogeography of Glossina hytrosavirus, and includes researches on the infectomics (defined here as the functional and structural genomics and proteomics) and pathobiology of the virus. Standard operation procedures for viral management in tsetse mass-rearing facilities are proposed and a future outlook is sketched.
Tsetse flies (Glossinidae: Diptera [ 1 ]) are important vectors of two debilitating diseases; the human African trypanosomosis (HAT or sleeping sickness), and African animal trypanosomosis (AAT or nagana) [ 2 ]. Tsetse flies and trypanosomoses render vast areas of agricultural land uninhabitable, especially during the rainy seasons [ 3 ]. Although over 30 species and sub-species of tsetse are described in the genus Glossina and most of which can transmit trypanosomoses, only 8–10 tsetse species are of medical and agricultural importance. The most important tsetse vectors are the riverine species ( G. palpalis, G. fuscipes, and G. tachinoides) in Western and Central Africa and the savannah species ( G. morsitans, G. austeni and G. pallidipes) in Eastern and Southern Africa [ 4 ]. Although tsetse fly fossils have been found in the 26-million-year-old shales of Florissant, Colorado, USA [ 5 ], to-date, tsetse flies are confined to Africa and in isolated populations on the Arabian Peninsula [ 6 ].
HAT is one of the most serious of the so-called “neglected tropical diseases” (NTDs [ 7 ]). NTDs are a group of chronic diseases endemic in low-income populations in Africa, Asia and the Americas [ 8 ]. Although trypanosomosis is restricted to 37 sub-Saharan African countries, its distribution extends to more than 10 million square kilometers of the African continent [ 9 ] ( Figure 1).
The people at the highest risk of tsetse bites, and of contracting HAT are the rural populations that primarily depend on small-scale agriculture, fishing, animal husbandry and hunting. Resurgence and epidemics of HAT are often associated with economic decline, civil disturbance/wars, population movements and refugees [ 4 ]. The presence of tsetse and trypanosomosis is considered as one of the “roots of hunger and poverty” in sub-Saharan Africa [ 10 ]. It is estimated that approximately 90% of Africa’s livestock consists of herds in small villages [ 11 ]. This implies that maintaining healthy animals can be the difference between subsistence misery and a tolerable life for the herders and their families. The FAO estimates that ~US$ 4.75 billion worth of agricultural products are lost annually due to AAT (including ~3 million cattle deaths), and ≥100 human lives are lost daily due to HAT [ 12 ].
Tsetse fly distribution in sub-Saharan Africa: The Figure legend shows the numbers of different tsetse species present in sub-Saharan African countries. Note that the colors in the figure legend correspond to the colors in the figure. (Map courtesy of the FAO).
HAT is difficult to treat, and there are no effective vaccines are available against either AAT or HAT. None of the available trypanocidal drugs for HAT is ideal; their treatment schedules are prolonged, excruciatingly painful (often described by patients as “fire in the veins”), and require continuous hospitalization [ 13 ]. The tsetse-transmitted trypanosomes initiate their lifecycle by first colonizing the tsetse hosts’ midguts, then migrate into the ectoperitrophic space, and via the alimentary canal to the salivary glands or the mouth parts [ 14 ]. The parasites differentiate into the final mammalian-infective form (trypomastigocyte) in the tsetse salivary glands, and are then transmitted to the mammalian host by an infected tsetse bite [ 15 ]. It should however, be noted that some steps in the lifecycle of trypanosomes are group-specific. For instance, members of the T. vivax group only stays in the proboscis, the T. congolense group has a lifecycle involving the proboscis and the midguts, while only the T. brucei group has a cycle involving the salivary glands [ 15 ].
Without treatment, HAT can be fatal. However, fatalities of trypanosomes differ from one group to another. For instance, in West Africa T. b. gambiensis cause a chronic HAT that can take many years to kill a patient, while in East Africa, T. b. rhodiensis cause an acute HAT that can kill a patient within weeks [ 16 , 17 ]. The most widely used drug, melarsoprol, which was developed in 1949 [ 18 ], is lethal for up to 10% of the treated patients [ 19 , 20 ]. It is also important to note that, one of the biggest problems in the treatment of HAT is that the patients are usually so weak that they are more likely to die from the treatment rather than from the disease. In addition, patients need to be properly fed for several weeks to regain strength before commencement of treatments. This presents a very serious problem considering that there are hardly any available funds to properly feed or purchase drugs for HAT treatment. The available drugs for AAT are overly expensive for African peasant farmers and there are reports of increasing drug-resistance [ 21 ] and drug-counterfeiting [ 22 ]. For all the above-mentioned reasons, control of the disease vector (tsetse) is of critical importance, and likely represents the most sustainable method to manage trypanosomoses [ 23 ].
In this review, we describe the “evolution” of tsetse control methods: from traditional methods used in the early 20th Century, to modern control methods. The sterile insect technology (SIT) is considered an effective control method to eradicate tsetse populations within the frame of area-wide integrated pest management (AW-IPM) approaches [ 24 ]. Successful application of SIT to manage tsetse fly populations heavily depends on the maintenance of large tsetse colonies in mass-rearing facilities to supply the required numbers of sterile males. However, laboratory colonies of some tsetse species such as G. pallidipes are infected by Glossina hytrosavirus, a double-stranded (ds) DNA virus recently classified into the Hytrosaviridae family of insect viruses [ 25 , 26 , 27 ]. Virus infection often causes collapse of G. pallidipes colonies [ 28 ]. In this regard, we also present a historical overview of the knowledge gained about Glossina hytrosavirus, and consider the virology, epidemiology, pathology, and prospects for control of viral infections in laboratory colonies of G. pallidipes.
Two main characteristics of tsetse render them suitable for eradication. Firstly, compared to other insects of medical and agricultural importance, tsetse flies have a very low reproduction rate ( k-strategists) [ 29 , 30 ]. Therefore, unlike many insect vectors which produce large numbers of eggs ( r-strategist) [ 30 ], tsetse flies have limited capacity to rebound in areas where their populations have been reduced. Secondly, tsetse flies are adapted for efficient exploitation of stable habitats offered by vertebrate nests or human dwellings with low levels of cross-breeding. This means that tsetse flies have reduced genetic variability within each vector population and therefore, have limited capacity to respond through selection pressures to various control interventions [ 31 ].
Tsetse control methods have evolved from discriminate bush clearing and wild game culling at the beginning of the 20th Century, to broadcast insecticide applications after the Second World War [ 32 ], traps, insecticide-impregnated targets [ 33 ] and live bait technologies [ 34 ]. Although these methods have been successfully used to locally reduce tsetse population sizes [ 29 ], each of these methods has limitations. Firstly, the methods do not protect the cleared areas from re-invasion by tsetse flies from residual pockets and from neighboring territories [ 35 ]. Secondly, the methods are applied in administratively-defined regions and run for an administratively-specified time [ 23 ], which mostly depend on how long external donor funds are available for the projects. Since the methods cannot be sustained beyond the time of these external donor-funded projects, the risk of the cleared areas being re-infested by tsetse flies increases. In the light of these developments, there was a need to explore other tsetse control methods.
In 1937, Knipling developed the theory of controlling insect pest population by manipulating their reproductive capacity. He likewise modeled that a target population could be eradicated when the release of sterile males was applied on an area-wide basis against an entire insect pest populations in a delineated area [ 36 , 37 ]. This method, commonly known as the sterile insect technique (SIT), involves large-scale production of insects in laboratory colonies in mass-rearing facilities. The male flies are then sexually-sterilized by exposure to a precise and specific dose of ionizing radiation, usually from a 60Co or 137Ce source [ 38 , 39 ]. The sterile males are then sequentially released into the target insect population in numbers that allows them to out-compete wild type males for wild virgin females [ 40 ]. After the virgin females mate with the sterile males, embryogenesis is arrested and consequently no viable offspring is produced. When the release of the sterile males is sustained, the size of the target insect population declines and can become extinct. The SIT is a robust control tactic that has been used very successfully against insect pests that are important in agriculture and trade. For instance, SIT was used to control Mediterranean fruit fly Ceratitis capitata (Diptera: Tephritidae) populations in Chile, Argentina, Mexico, Central America, South Africa, Israel etc. [ 41 , 42 ]. Lately, the SIT has also been used with great success against several lepidopteran pests such as the codling moth Cydia pomonella (L.) (Lepidoptera: Tortricidae) in the Okanagan Valley of Canada [ 43 ], the false codling moth Thaumatotibia leucotreta (Meyrick) (Lepidoptera: Tortricidae) in South Africa [ 44 ], the Australian painted apple moth Teia anartoides Walker (Lepidoptera: Lymantriidae) in New Zealand [ 45 ], and the pink bollworm Pectinophora gossypiella (Saunders) (Lepidoptera: Gelechiidae) in Texas, New Mexico, Arizona, California (US) and in Sonora and Chihuahua of northern Mexico [ 41 , 46 ].
The SIT played a pivotal role in the sustainable eradication of the tsetse fly Glossina austeni from the Unguja Island (Zanzibar) [ 47 , 48 ]. This program was preceded by successful applications of the technique against G. palpalis gambiensis and G. tachinoides in the Sideradougou area in Burkina Faso, and against G. palpalis palpalis in the Lafia area of Nigeria [ 49 , 50 ]. The programs in Burkina Faso and Nigeria were, however, not implemented according to AW-IPM principles and the tsetse-cleared area was re-invaded after the programs were completed. Following the area-wide eradication of G. austeni the island was declared tsetse-free in 1997, it still is to-date.
The success of SIT in eradicating G. austeni and trypanosomosis from Unguja Island inspired African Governments to call for increased efforts to manage the tsetse fly and trypanosomosis on mainland Africa. Consequently, an AW-IMP program with an SIT component was initiated in 1997 to eradicate G. pallidipes from a 25,000 square kilometers of under-utilized fertile land in the Southern Rift Valley of Ethiopia [ 51 ]. For this Ethiopian SIT program, a laboratory colony of G. pallidipes was established in 1997 at the Insect Pest Control Laboratories (IPCL) of the Joint FAO/IAEA Seibersdorf Laboratories, Austria. This colony was initiated from pupae originating from Arba Minch, Ethiopia. However, the colony collapsed in 2002. After the collapse of the colony, more pupae were shipped from Arba Minch to IPCL, Seibersdorf in an attempt to re-establish the colony. However, these attempts have been largely unsuccessful: currently, only a few of these flies ( n = 25) are surviving, and their fecundity is very low. Further investigations revealed that the colony collapse was due to infection by a virus that caused salivary gland hypertrophy (SGH) syndrome [ 52 , 53 , 54 ]. A chronology of the emergence of the SGH syndrome and the discovery of the virus that causes the syndrome is discussed in Section 3: a summary is presented in in Table 1 .
Chronological history of the discovery and distribution of hytrosaviruses.
| Investigator(s) | Year | Major contribution(s) | Ref. |
|---|---|---|---|
| Whitnall | 1932, 34 | First published record of SGH Glossina spp. | [ 55 , 56 ] |
| Burtt | 1945 | Suggested that SGH is sex-linked | [ 57 ] |
| Jenni et al. | 1973, 74, 76 | Described virus particles in G. morsitans and G. fuscipes fuscipes; suggested Golgi-ER viral assembly | [ 58 , 59 , 60 , 61 ] |
| Lyon | 1973 | First published record of SGH in M. equestris | [ 62 ] |
| Jaenson | 1978 | First clear association of viral particles with SGH | [ 63 ] |
| Amargier et al. | 1979 | Reported SGH in M. equestris | [ 64 ] |
| Otieno et al. | 1980 | Reported SGH as common feature in wild G. pallidipes | [ 65 ] |
| Opiyo | 1983 | Reported poor productivity of G. pallidipes colony at Kenya Trypanosomosis Research Institute (KETRI), Kenya | [ 66 ] |
| Odindo et al. | 1981, 83, 86 | Demonstrated that viral particles are infectious per os; First report that Glossina virus has dsDNA genome | [ 67 , 68 , 69 , 70 ] |
| Jaenson | 1986 | First report on reduced insemination rates, fecundity and lifespan in laboratory colonies of G. pallidipes | [ 71 ] |
| Ellis et al. | 1987 | Reported SGH in Zimbabwe and Ivory Coast | [ 72 , 73 ] |
| International Atomic Energy Agency | 1987, 89 | Reported poor productivity of G. pallidipes colonies at IPCL, Seibersdorf, Austria | |
| Odindo | 1988 | Proposed Glossina virus as a bio-control agent | [ 74 ] |
| Jura et al. | 1988, 89, 92, 93 | Demonstrated transmission of Glossina virus after artificial infection | [ 75 , 76 , 77 , 78 ] |
| Kokwaro et al. | 1990–1991 | Cytopathology of virus particles in tsetse salivary glands | [ 79 , 80 ] |
| Shaw | 1993 | Reported SGH in G. m. swyenatoni and G. brevipalpis | [ 81 ] |
| Coler et al. | 1993 | First published record of SGH in M. domestica | [ 82 ] |
| Sang | 1996–1999 | Reported SGHV in tsetse milk glands, mid-gut and male accessory reproductive glands | [ 83 , 84 , 85 , 86 ] |
| International Atomic Energy Agency | 2002 | Collapse of an Ethiopian-derived G. pallidipes colony at IPCL, Seibersdorf, Austria | |
| Kokwaro | 2006 | Reported viral particles in male accessory reproductive glands of G. m. morsitans Westwood | [ 87 ] |
| Abd-Alla et al.; Garcia-Maruniak et al. | 2008 | G. pallidipes and M. domestica SGHVs genome sequenced | [ 26 , 27 ] |
| Abd-Alla et al. | 2009 | Establishment Hytrosaviridae family | [ 27 ] |
| Salem et al. | 2009 | Transcription analysis of M. domestica SGHV | [ 88 ] |
| Kariithi et al. | 2010–2013 | Described proteome and morphogenesis of Glossina SGHV | [ 89 , 90 ] |
| Prompiboon et al. | 2010 | Reported wild-wide distribution of SGHV in M. domestica | [ 91 ] |
| Luo and Zheng | 2010 | SGHV-like virus described in accessory gland filaments of the parasitic braconid wasp, D. longicuadata | [ 92 ] |
| Boucias et al. | 2013 | Described the role of endosymbionts on trans generational trans mission of SGHV in G. pallidipes | [ 93 ] |
| Abd-Alla et al. | 2013 | Reported successful management of Glossina hytrosavirus and eradication of SGH in G. pallidipes colonies at IPCL, Seibersdorf | [ 94 ] |
In the 1930s, Whitnall reported that some G. pallidipes individuals collected in the Umfolosi Game Reserve, Zululand, South Africa, had grossly enlarged salivary glands [ 55 ]. In the 1970s, the enlargement of salivary glands was shown to be associated with a virus found in cytoplasmic vacuoles of the salivary gland and midgut epithelial cells of G. fuscipes and G. morsitans [ 56 , 57 , 58 , 59 ]. The virus was at that time described as “virus-like particles” (VLPs), morphologically resembling the VLPs previously described in Drosophila, mosquitoes, and nematodes [ 58 ]. The virus detected in tsetse was erroneously suggested to be an arbovirus because other hematophagous insects (mosquitoes, ticks, sandflies and gnats) had been widely known to transmit arboviruses [ 57 ].
There were several notable features that supported the suggestion of the tsetse virus as an arbovirus. For instance, the rod-shaped viral particles detected in tsetse were thought to resemble one non-typical arbovirus group, the vesicular stomatitis Indiana virus, which was found to be rod-shaped with distinctive helical symmetry [ 95 , 96 ]. Other notable features included the size of the viral particles, replication in the host salivary glands, and secretion of mature virions via saliva [ 97 , 98 , 99 , 100 ]. In addition to resemblance to arboviruses, it was also suggested that the tsetse virus was morphologically similar to baculoviruses [ 63 ].
In the 1980s and 90s, several researchers suggested that the tsetse virus is maintained in nature via transmission from the mother to her progeny and not from the male parent [ 71 , 75 , 83 , 85 ]. However, father-to-progeny viral transmission cannot be totally ruled out. Possibly, the lack of detectable father-to-progeny viral transmission may result from reduced transmission rates, rather than a total failure of transmission. The phenomenon of father-to-progeny virus transmission has been demonstrated in other insect viruses. For instance, in the sigma viruses ( Rhabdoviridae), the apparent failure of father-to-progeny transmission of the sigma virus in Drosophila was attributed to transfer of very low viral titers to the developing embryo via the sperm [ 101 ]. In the case of sigma viruses, the virus fails to infect early germ cells and thus prevents gamete-infection, even though viral titers in the somatic cells may increase later when the fly reaches adulthood [ 102 ]. Although the Glossina hytrosavirus is transferred from mother to her progeny, father-to-progeny transmission cannot be totally ruled out. This revelation implies that, under undefined conditions, the virus is reactivated from a “latent” state to a symptomatic state [ 68 ]. It was proposed that the virus-induced abnormalities were contributing to the natural regulation of tsetse populations in the field [ 68 ]. This suggestion appears to be supported by reports that related viruses such as baculoviruses regulate the population dynamics of their insect hosts in a density-dependent manner, some of which do not induce disease symptoms [ 103 ].
SGH symptoms have been reported in two other dipteran insects: in adult populations of the narcissus bulb fly, Merodon equestris (Diptera; Syrphidae) [ 62 , 64 ], and in infections in the house fly, Musca domestica L. (Diptera; Muscidae) collected at a dairy in Florida, USA [ 82 ]. Notably, the main disease symptoms (SGH) of the virus in the bulb fly and in the house fly were similar to those observed in the tsetse [ 62 ]. To date, there has been no further research performed on the Merodon virus. Although the Glossina and Musca viruses share pathological impacts on their respective hosts such as seasonal fluctuations in the incidence of SGH symptoms [ 68 , 91 ] and suppression of reproductive fitness in the host [ 75 , 82 , 85 , 86 ], the two hytrosaviruses differ in several aspects. For instance, unlike the tsetse virus, the house fly virus appears not to be maintained in nature by mother-to-progeny transmission [ 104 , 105 ]. Notably, whereas there is no documented evidence that the tsetse virus has potential to infect heterologous hosts, the house fly virus can infect, reduce egg production and the lifespan in the stable fly, Stomoxys calcitrans (Diptera; Muscidae) [ 106 ], but it did not induce expression of SGH symptoms in S. calcitrans [ 106 ].
Recently, a virus was fortuitously detected in hypertrophied accessory gland filaments (AGFs) of the parasitic wasp, Diachasmimorpha longicuadata (Ashmead) (Hymenoptera; Braconidae) [ 92 ]. The virus, presumed to cause the hypertrophy of the AGFs had ultra-structural features similar to those causing SGH in dipteran hosts [ 92 ]. The wasp virus was detected in a D. longicuadata that originated from Hawaii and released in Thailand and subsequently introduced to southern China as a bio-control agent for the oriental fruit fly, Bactrocera dorsalis (Hendel) (Diptera; Tephritidae) [ 92 ]. Inferring from other insect-viral systems, this discovery of the virus in the wasp may be significant. B. dorsalis is distributed throughout Southeast Asia and the Pacific, and is considered to be one of the most prominent agricultural pests in this part of the globe [ 107 ]. D. longicuadata is known to introduce D. longicuadata entomopoxvirus (DlEPV) into Caribbean fruit fly Anastrepha suspensa (Diptera: Tephritidae) during oviposition [ 108 ]. DlEPV, the first reported endosymbiotic entomopoxvirus, protects the wasp’s eggs by inhibiting encapsulation by the host’s hemocytes [ 109 ]. Consequently, one might argue that, similar to the DlEPV, the virus detected in D. longicuadata may potentially be an endosymbiont to the wasp. Unfortunately, similar to the Merodon virus, the virus detected in the AGFs of D. longicuadata has not been further investigated.
As indicated in Section 3, dipteran adults infected by hytrosaviruses can exhibit overt SGH symptoms. Flies with SGH are recognizable to the naked eye by the swollen opaque-white appearance of the abdomen, and sac-like course textures [ 55 , 60 ] ( Figure 2).
Notably, whereas the SGH syndrome in Glossina mainly results from cellular hypertrophy (enlargement), SGH in Musca reflects a combined effect of both cellular and nuclear hypertrophy. Pathological effects of the Glossina hytrosavirus in colonized G. pallidipes were first documented the early 1980s. In 1979, a G. pallidipes colony was initiated at the Kenya Trypanosomosis Research Institute (KETRI) using flies caught from the Kibwezi forest, Kenya. This colony collapsed within two years of its establishment due to poor productivity [ 66 ]. Investigations were done to identify possible causes of the poor performance and eventual collapse of the colony. The study parameters included dissections of female spermathecae (to check insemination rates) and male testes (to check presence of motile spermatozoa as an indicator of male efficiency) [ 66 ]. The results demonstrated deterioration of insemination in females, aspermia, reversed ovariole development, and distortion of sex ratio. Other hytrosavirus-induced collapses of G. pallidipes colonies have been reported over the last two decades [ 28 , 52 ]. The colony collapses are a direct consequence of testicular degeneration (in males) and ovarian abnormalities (in females).
Pathology of hytrosaviruses: ( A) Normal (Nsg) and hypertrophied (Hsg) salivary glands dissected from G. pallidipes. It should be noted that the pair of Nsg are dissected from a different fly for comparison with the Hsg. Notice that the glands exhibiting salivary gland hypertrophy (SGH) symptoms are enlarged ≥5 times the size of normal glands; ( B) Male G. pallidipes with asymptomatic ( i ) and symptomatic ( ii ) salivary glands; ( C) Female M. domestica with healthy and ( D) hypertrophied salivary glands showing lack of ovarian development in the virus-infected fly ( D). Abbreviations: Mg, midgut; Ov, ovary; Sg, salivary gland. (Figure sources: Panel A [ 28 ]; panel B [ 110 ]; panels C and D [ 111 ]; used with permission).
One of the outstanding questions to be answered is: why does the Glossina hytrosavirus cause such serious problems in colonized G. pallidipes? It should be noted that such serious impacts are yet to be reported in other tsetse species. Further, other insect cultures (e.g., Drosophila) do not seem to experience such virus-induced problems. Although this question needs more research, inferences can be made from other viral-insect systems to understand the case of Glossina hytrosavirus pathology. It is important to keep in mind that insect viruses hardly “walk alone”: viruses co-infect (simultaneously) their hosts with other micro-organisms such as the vertically-transmitted bacterial endosymbionts [ 112 , 113 , 114 ]. Population dynamics and roles of endosymbionts on viral infections have been documented in the infection of Drosophila by sigma viruses. Boucias et al., have recently suggested that the pathological effects of Glossina hytrosavirus on colonized G. pallidipes flies are modulated by interplay between the virus and tsetse endosymbionts [ 93 ]. Specifically, the researchers highlighted the absence of Wolbachia in the laboratory stock of G. pallidipes that was used in the study. Although Glossina hytrosavirus has been reported in other Wolbachia-harboring tsetse species [ 115 ], so far, no harmful impacts have been reported on the virus-infected tsetse fly species that harbor Wolbachia. It has been reported that the levels of PCR-detectable Glossina hytrosavirus in G. fuscipes fuscipes populations are influenced by the tsetse genotype, and inversely correlate with Wolbachia prevalence [ 116 ]. Notably, Wolbachia is also absent from some of the major economically and medically important species of mosquitoes such as Anopheles spp. [ 117 ]. Studies have also demonstrated that while none of the Wolbachia-infected Ae. aegypti tested positive for Dengue virus after oral infection, 30%–100% of Wolbachia-free mosquitoes were virus-infected [ 118 ]. It can therefore, be hypothesized that the absence of Wolbachia in the G. pallidipes colonies explains the severe negative impact of Glossina hytrosavirus on large-scale colonies. Considering the shared intracellular locations of Glossina hytrosavirus and Wolbachia, this endosymbiont may influence the outcome of viral infection in tsetse hosts.
To understand the pathobiology of Glossina hytrosavirus, the virus was purified from hypertrophied salivary glands dissected from G. pallidipes flies originating from Tororo, Uganda in 1975. This colony was initially maintained at Leiden University, The Netherlands, and subsequently transferred to IPCL, Seibersdorf, Austria in 1982. Twenty-six years later, the genome of the virus was fully sequenced (NC_010356.1) [ 26 ]. The 190 kbp-long viral genome is a circular dsDNA molecule [ 26 ] ( Figure 3), and represents an entirely new group of insect viruses. A total of 322 non-overlapping open reading frames (ORFs) were identified, of which 160 ORFs were presumed to encode viral proteins. One hundred thirteen (70.6%) of these ORFs did not match to any of the sequences available in the various databases [ 26 ]. Thirty-seven ORFs (23.1%) were homologues to genes of other viruses, while ten (6.3%) were homologues to non-viral/cellular genes. Most notable of the Glossina virus ORFs was the presence of homologues to five of the so-called per os infectivity factor genes ( pifs) ( p74, pif-1, pif-2, pif-3, and odv-e66) encoded by baculoviruses, nudiviruses and whispoviruses [ 119 ]. Other notable homologies included homologues to sixteen (entomo-) poxvirus genes, three iridovirus and nimavirus genes each, two ascovirus genes and one herpesvirus gene. Homologues to cellular genes included chitinase, DNA helicases, thymidylate synthases, and several bacterial endosymbionts genes [ 26 ]. Approximately 3% of the Glossina virus genome is characterized by an inverted repeat ( ir) sequence, and fourteen direct repeat sequences ( drs) composed of 51–246 bp.
The Musca virus genome has also been sequenced [ 120 ]. The viral genome is a ~124 kbp-long circular dsDNA molecule [ 120 ], with a total of 108 putative ORFs. Similar to the Glossina virus, over 70% (76/108) of the putative Musca virus ORFs had no significant homologies to proteins available in various databases. Notably, the two viruses share at least eight homologs of baculovirus core genes, including homologues to the pif genes, and to cellular genes [ 120 ]. Eighteen tandem drs were distributed throughout the viral genome [ 120 ]. The size of the repeated sequences ranged from 149 bp (dr15) to only 9 bp long ( dr18), and the number of copies of the drs ranged from 1.9 to 7.4, making the total sizes of the drs from 30 bp–380 bp-long. The G + C content of Musca virus is 43.5%, a ratio similar to that found in several nudiviruses: Heliothis zea nudivirus-1 (HzNV-1) and Oryctes rhinoceros nudivirus (OrNV), but significantly higher than that of Gryllus bimaculatus nudivirus (GbNV; 28%) and the Glossina virus (28%) [ 121 , 122 , 123 ].
Circular representation of the Glossina hytrosavirus genome: Arrows indicate positions and directions of transcription for the putative open reading frames (ORFs). The ORF numbers and putative genes are shown. The alphabetical numbers represent restriction fragments generated by BglII enzyme during the electrophoretic profiling of the viral genome.
The above-mentioned hytrosavirus gene homologies to other insect viral genes have several implications. Firstly, the conserved nature of the pifs among all the baculoviruses that have so far been sequenced [ 124 ], and their importance in early oral infection [ 125 ], may reflect a common ancestry or similar modes of transmission and infection of the hytrosaviruses, baculoviruses, nudiviruses and nimaviruses. Secondly, the presence of repeat regions in the genomes of the these hytrosaviruses possibly reflects a common mode of transcriptional regulation and DNA replication [ 126 ]. Thirdly, the presence of the ORFs potentially encoding orthologues of cellular proteins may be advantageous for the viral infection. For instance, it has been suggested that large DNA viruses gain independence of the transcription and replication machineries of their hosts by encoding their own functional cellular orthologues of cellular proteins, mostly enzymes [ 127 ]. It remains to be ascertained whether the Glossina and Musca hytrosavirus ORFs do encode functional cellular orthologues, and what their functional roles are.
Initially, the Glossina virus could not be assigned to any of the families of insect DNA viruses described at that time [ 69 ]. Accumulated data from various studies on the viral pathobiology singled-out signature of hytrosaviruses are shown in Table 2 . Notably, in contrast to many other invertebrate large dsDNA viruses such as baculoviruses and entomopoxviruses, virions of hytrosavirus are not “packaged” in occlusion bodies. Based on these characteristics, the virus was proposed to be accommodated into a new virus family, Hytrosaviridae [ 27 ], a name derived from “ Hy per tro phia s ialo a denitis”, the Greek word for “salivary gland inflammation”. The Glossina virus is now a member of the newly-established Hytrosaviridae family, genus Glossinavirus, as the species Glossina hytrosavirus [ 27 , 128 ]. Similarly, based on the shared characteristics between Glossina and Musca viruses, the Musca virus is the second member of Hytrosaviridae family, but accommodated in the genus Muscavirus, and species Musca hytrosavirus. Hereafter, the Glossina and Musca hytrosaviruses are abbreviated as GpSGHV and MdSGHV, respectively.
Signature characteristics of hytrosaviruses: The table summarizes the principal biological, structural and molecular characteristics of the GpSGHV and MdSGHV. Table modified from [ 129 ]; used with permission.
| Key characteristics | GpSGHV | MdSGHV | Ref. | |
|---|---|---|---|---|
| Biological | Replication site(s) | Salivary glands, milk glands | Salivary glands | [ 75 , 82 , 83 , 104 , 130 ] |
| Infection phenotype | Symptomatic; asymptomatic | symptomatic | [ 28 , 93 ] | |
| Symptoms besides SGH | Male/female gonadal abnormities | Under-developed ovaries | [ 75 , 82 , 93 , 105 ] | |
| Vertical (trans-generational) transmission | Milk glands, trans-ovarian | No evid ence available to-date | [ 52 , 75 , 82 , 93 , 105 ] | |
| Horizontal transmission | Oral (salivary) secretions | Oral (salivary) secretions and excreta | [ 25 , 52 , 131 ] | |
| Sterilizing agent | Male and female infertility | Female infertility | [ 86 , 105 ] | |
| Impact on host behavior | Impaired feeding | Mating disruption | [ 84 , 105 , 132 ] | |
| Morphogenesis | Cytoplasmic envelopment, egress by disintegration or rapture of the plasma membrane | Cytoplasmic, egress via budding on the plasma membrane | [ 93 , 133 , 134 ] | |
| Structural | Virion size | 50 × 1000 nm | 65 × 550 nm | [ 120 , 134 ] |
| Ultra-structure | Nucleocapsid, tegument, envelop, outer surface projections | Nucleocapsid, envelop | [ 89 ] | |
| Virion topography | Helical surface projections | Braided, bead-like surface | [ 89 , 120 ] | |
| Molecular | Genome size | 190,032 bp | 124,279 bp | [ 26 , 120 ] |
| G + C content (%) | 28 | 44 | [ 26 , 120 ] | |
| No. of RFs | 160 | 108 | [ 26 , 120 ] | |
| Shared ORFs between GpSGHV and MdSGHV | 41 | 37 | [ 90 , 128 ] | |
| ORFs homologs in other large dsDNA viruses | Nudivirus (11), whispovirus (4), baculovirus (12) | Nudivirus (17), whispovirus (6), baculovirus (12) | [ 26 , 120 ] |
Phylogenetic analysis of GpSGHV and MdSGHV based on the DNA polymerase gene ( dna pol), which is present in all large dsDNA viruses, does not cluster these hytrosaviruses with other insect dsDNA viruses [ 26 , 129 ]. Instead, the dna pol of GpSGHV and MdSGHV clusters more closely to that of herpesviruses and other viruses with linear dsDNA genomes. On the other hand, the alignments free method using whole proteome phylogenetic analyses of dsDNA viruses shows close association of the hytrosaviruses and nimaviruses (specifically the white spot syndrome virus; WSSV) [ 135 , 136 , 137 ]. Despite the apparent ambiguities, these and other phylogenetic methods, such as super tree and super matrix methods [ 138 , 139 ], support the notion of a common ancestry of GpSGHV and MdSGHV with baculoviruses, nudiviruses and nimaviruses [ 124 , 139 ]. The hytrosaviruses share 12 out of the 31 baculovirus core genes identified to date [ 139 ], and are therefore, more distantly-related to baculoviruses than for instance the nudiviruses: Nudiviruses share 20 of baculovirus core genes [ 124 ].
The presence of protein-coding regions or ORFs in a viral genome does not necessarily imply the presence of functional proteins. For instance, frame shift mutations caused by “indels” (insertions/deletions) in viral genomes can alter the structure and functions of the encoded proteins resulting in decrease or complete loss in protein expression [ 140 ]. Further, some genes may not have functional promoters.
Proteomics can be used to validate presence of virally-encoded proteins. Although the repertoire of biological processes controlled by viral gene products is complex [ 141 ], proteomic analysis of the GpSGHV made it possible to reconstruct a dynamic view of the viral infection process [ 89 , 90 ]. A combined approach of proteomics and electron microscopy revealed that the GpSGHV virion consists of four morphologically distinct structures: nucleocapsid, tegument, envelope, and helical surface projections. Almost 50% of the virally encoded proteins were found to reside within the viral tegument, reflecting potential roles in cytoplasmic trafficking of the virions during infection [ 89 ]. A limited proteome of the MdSGHV proteome is also available [ 133 ]. Although GpSGHV and MdSGHV share more than thirty protein homologues [ 90 ], the ultra-structural features of the MdSGHV differ from GpSGHV, but have not been studied in detail. GpSGHV also incorporates cellular proteins derived from infected cells, which may significantly contribute to the viral morphogenesis [ 89 ]. It is not yet known whether MdSGHV incorporates any host-derived cellular proteins into its mature virion, but it is very likely.
Equally important to the repertoire of viral proteins composing the viral proteome are the interactions encrypted by both the viral and host genomes. Analyses of the secretome of GpSGHV-infected G. pallidipes revealed that up to twenty of the secreted host proteins potentially interact with at least twenty-five viral proteins [ 142 ]. GpSGHV alters the protein expression patterns in the host salivary glands, and ≥40% of both virally-encoded and host proteins are specifically expressed in the symptomatic flies but not in asymptomatic flies [ 142 ]. The GpSGHV-host are important because, in the wild tsetse populations, the viral infections are primarily asymptomatic, whereas in a laboratory setting, at least for G. pallidipes colonies, the response to GpSGHV can be highly symptomatic. This suggests that in the wild tsetse populations, GpSGHV is mainly in covert (latent or persistent) infection state, and the virus is only reactivated to symptomatic state under certain specific ecological and/or environmental conditions. It is not clear which viral and/or host proteins may be expressed during viral latency. However, Lee et al. reported that latency can be caused by the infection of Spodoptera frugiperda (Sf) cells with Autographa californica multiple nucleopolyhedrovirus (AcMNPV) that lack the anti-apoptosis gene p35 [ 143 ]. Notably, even during the latency, infectious AcMNPV particles were continuously produced. Under the conditions used by these investigators, it appears that there is a balance between protein expression and the apoptotic pathway. Whereas GpSGHV does not have any homologue of any known anti-apoptotic gene, MdSGHV contains a homologue of Melanoplus sanguinipes entomopoxvirus anti-apoptotic gene, iap [ 120 ]. It should be noted that one of the major differences between GpSGHV and MdSGHV is that, MdSGHV does not have asymptomatic infection: instead, the virus induces symptomatic infection within 48 h post oral infection [ 144 ]. In addition, unlike GpSGHV, there is no evidence of vertical MdSGHV transmission. Since the issue of latency in hytrosaviruses is currently being debated among the Hytrosavirus Study Group of the ICTV, we briefly address it in Section 5.4 below.
Latency of insect virus infections is probably widespread. Latency can be defined as a viral infection that does not produce visible disease symptoms (e.g., SGH in the case of GpSGHV), but the virus may be transmitted, either vertically or horizontally [ 145 ]. This phenomenon raises a number of questions, particularly in the case of hytrosaviruses, which is the subject of this review.
The first question about latency is: is latency advantageous to the virus? Possibly, latency is an evolutionary viral strategy to utilize cues from the host and/or environment as opportunities for dispersal and transmission. In 1992, Fuxa et al. argued that in the adults of the armyworm S frugiperda (Lepidoptera: Noctuidae) latency may provide dispersal and reproductive advantages to S frugiperda nucleopolyhedrovirus (SfNPV) [ 145 ]. As the insect host metamorphoses to adulthood, vertical transmission becomes epizootiologically more important than horizontal transmission. The virus, therefore, takes advantage of the changes in the infected cells’ quality to produce nonlethal, vertically transferable virions. In 1993, Hughes et al. described a latent infection in a laboratory colony of the cabbage moth, Mamestra brassicae (Lepidoptera: Noctuidae) that was vertically transferred from one generation to another without disease symptoms [ 146 ]. Latency may also be influenced by virus-microbiome interplay as has been recently suggested [ 93 ]. Latency may also be stress-induced: for instance by crowding, food shortage, and superinfection in some baculoviruses [ 147 , 148 ]. Latency may also be connected to the antiviral response mechanisms of the hosts. Recently, it has been found that invertebrate DNA viruses, such as baculoviruses, iridoviruses and nudiviruses, provoke a specific RNA interference (RNAi) or microRNA response, which may prevent premature death of the host by preventing viral over-replication [ 149 , 150 , 151 ]. In case of the tsetse fly, there may be a further interaction between GpSGHV, the microbiome and the trypanosome parasite, and this tripartite interaction may be tailored to prevent trypanosome transmission [ 152 ].
The second question on viral latency is: how is viral latency established? One strategy in which viruses are vertically transmitted is by integrating into the host genome. For instance, the dsDNA polydnaviruses (PDVs) are vertically transmitted as proviruses stably integrated into the genomes of the parasitic wasps, ichneumonid (Hymenoptera; Ichneumonoidae) and braconid (Hymenoptera; Braconidae) [ 153 ]. Another strategy of vertical viral transmission is as infectious virions, such as the gypsy elements in D. melanogaster, which are transmitted as infectious particles from mother to progeny via oocytes [ 154 ]. Other insect viruses are maternally transmitted to the progeny flies, but also rely on horizontal transmission to be sustained in the host populations. An example of a virus utilizing this strategy is the DNA Leptopilina boulardi filamentous virus (LbFV) that infects the solitary parasitic wasp L. boulardi (Hymenoptera: Figitidae). When both an LbFV-infected and a non-infected female wasp lay eggs in Drosophila larvae during oviposition, LbFV is horizontally transmitted to the offspring of the non-infected wasp parent [ 155 ]. Consequently, the daughters of the non-infected females acquire the super-parasitizing phenotype (conferred by LbFV-infection) on emergence, with a 55% probability [ 156 ]. Other insect-infecting viruses, such as dengue virus (DENV) and GpSGHV, are primarily horizontally transmitted, but are also maternally transmitted [ 111 , 157 ]. Whether or not hytrosaviruses do integrate into the host genome is an issue currently under investigation.
The GpSGHV replicates in the nucleus of host cells, where it induces formation of virogenic stroma (chromatin-like network of electron-dense filaments) [ 89 ]. After nuclear assembly the GpSGHV progeny nucleocapsids translocate to the cytoplasm where the envelopment is orchestrated, possibly via the ER-Golgi system, based on residual ER-Golgi proteins in the virion proteome. The possibility of the ER-Golgi assembly of the tsetse virus was proposed in the 1970s [ 59 ]. Based on the GpSGHV pathobiological data obtained to date (see summary in Table 1 ), cytoplasmic assembly of the virus particles induces cellular damage that possibly culminates into disintegration of the cell plasma membrane as the mature virions egress from the infected cell [ 89 ]. The virions are continuously shed via the saliva into the blood meals during membrane feeding in G. pallidipes colonies, and are infectious per os to healthy flies [ 52 , 142 ]. A remarkable difference between GpSGHV and MdSGHV is that the MdSGHV virions migrate to, and bud out of the plasma membrane of infected cells [ 133 , 134 ]. Unlike GpSGHV, MdSGHV does not have surface projections. Based on the available data, an infection model for GpSGHV can be hypothesized ( Figure 4).
Schematic (hypothetical) representation of GpSGHV morphogenesis: ( I) an enveloped (infectious) viral particle binds to receptors on susceptible host cell. ( II) Once bound, the virus is uncoated as it enters the host cell ( III). Cytoplasmic trafficking of the viral nucleocapsid to the nucleus ensues ( IV), followed by disassembly of viral nucleocapsids by partial degradation of capsid and tegument proteins and release of viral DNA into the host cell nucleus. ( V) Once in the nucleus, the virus induces formation of virogenic stroma (VS), where viral nuclear replication occurs. ( VI) After packaging of nascent viral DNA into capsids, nucleocapsids are assembled, after which they egress into the cell cytoplasm. ( VII) The entire envelopment of nascent nucleocapsids is orchestrated in the cytoplasm, possibly via the ER-Golgi system. ( VIII) Egress of the new mature virions from the infected cell possibly occurs via rupture or disintegration of the plasma membranes.
Early epidemiological surveys established that the prevalence of SGH symptoms in wild tsetse populations depends on the geographical location, seasonality, the distribution, age and species tsetse flies [ 65 , 68 , 72 , 73 ], and that the prevalence was generally low (0.9–15% in Kenya [ 65 , 68 ], 0.4–2% in Zimbabwe [ 72 ], 0.3–4.5% in Burkina Faso [ 73 ]). However, these surveys were based on the occurrence of SGH symptoms by fly dissections, which did not take into account that the majority of GpSGHV infections are asymptomatic [ 110 ]. Recently, PCR-based surveys were performed on G. pallidipes samples that were randomly collected from eleven geographical locations in six countries of eastern and central Africa [ 54 ]. The PCR-based surveys showed that an average of 34% of G. pallidipes samples were GpSGHV-infected: viral prevalence ranged from 2% to 100% [ 54 ]. Moreover, GpSGHV diversity was noted to be low. Twenty-three different viral haplotypes occurred in the same geographical locations. The GpSGHV haplotypes distribution patterns were somewhat confused: some of the viral haplotypes occurred only in certain geographical locations compared to others.
Unlike tsetse flies, house flies are among the most widely distributed insects, found in all inhabited areas of the world [ 158 ]. The global distribution of house flies allowed isolation of MdSGHV was isolated from the fly samples collected from various geographical locations around the globe i.e., from North America, Europe, Asia, the Caribbean, and the south-western Pacific [ 91 , 159 ]. The prevalence of MdSGHV infections in the field house fly populations can peak at ~30% at certain geographical sites, with a typical prevalence range of 0.5–10% at any given sampling period [ 104 ]. Further, the frequencies of MdSGHV infections positively correlate with the house fly population densities [ 104 ]. To date, it is unknown what MdSGHV haplotypes circulate among house fly populations. However, ecogeographic and behavioral attributes of the tsetse and house flies may influence selection pressure of GpSGHV and MdSGHV. Unlike in the case of GpSGHV, the opportunity to expose MdSGHV to the external environmental conditions such as UV radiation has probably led to the higher genetic variability of MdSGHV compared to the GpSGHV [ 54 , 91 ].
Studies have revealed that GpSGHV-infected flies typically exhibit two infection phenotypes: a chronic non-debilitating asymptomatic state and an acute symptomatic state that causes reproductive dysfunction and colony collapse [ 93 ]. Various crosses were made between “healthy” (asymptomatic; PCR-negative) and symptomatic flies [ 52 ], whose outcomes are summarized in an infection model shown in Figure 5 [ 53 ]. Three key features of GpSGHV infection dynamics in laboratory colonies of G. pallidipes should be noted. Firstly, all males with SGH symptoms are fully sterile. Secondly, females with SGH symptoms do produce progeny flies; most (if not all) of these progeny flies exhibit SGH symptoms. Thirdly, asymptomatic females produce a small proportion of SGH-positive progeny flies; if such progeny flies are female, the F
A model of dynamics of vertical ( A) and horizontal ( B) GpSGHV transmission in laboratory colonies of G. pallidipes. The laboratory colony flies in the colony may either be “healthy” (PCR-negative; shown in black), asymptomatic—(in blue), or symptomatic—(in red). ( A) Some symptomatic (SGH-positive) females do produce F
Taken together, the following implications are apparent. Firstly, as hypothesized by Jaenson in 1986 [ 71 ], survival of G. pallidipes colonies may depend on the infection status of the mothers: all F
The peritrophic membrane (PM) of the intestinal tissue constitutes a physical barrier for viral diffusion into the salivary glands via the hemolymph. There is still conflicting information about the function of the PM in insects. Possible functions include protection of the stomach epithelium [ 161 ], ultrafiltration [ 162 ] and preventing the entry of microbes [ 163 ]. It has been suggested that the PM may limit the vectorial capacity of some hematophagous insects such as the sandflies [ 164 ]. In other insects such as lepidopterans, the PM is an age-dependent major barrier to baculovirus infection per os [ 165 ]. Further, Blackburn et al., [ 166 ] suggested that the PM is an impenetrable barrier for the diffusion of Leishmania or Trypanosoma parasites at certain stages after the blood meal. In mosquito-transmitted viruses, only 0.1% of Zika virus was shown to penetrate to the hemocoel of Aedes aegypti because of the barrier effect of the PM [ 167 ]. Subsequently, it has been suggested that the PM is a possible limiting factor for virus susceptibility in mosquitoes [ 168 ]. Likewise, the barrier function of the PM might have prevented GpSGHV from reaching the salivary glands of experimentally-infected G. pallidipes for at least 48 h-post-blood meal. Thereafter, the PM starts to decay and its disintegration may be completed a few days after, depending on availability of blood meal as has been suggested in sandflies [ 169 ]. It has been demonstrated that viruses enhance infection by disintegration of the PM [ 170 ]. There is strong evidence that GpSGHV virions contain chitinase [ 89 , 90 ], probably to facilitate the virus to penetrate the PM, which is essentially composed of chitin and proteins (mucins) [ 171 ]. This function has been demonstrated in the infection of mosquitoes by Plasmodium. The Plasmodium secretes chitinase to penetrate the PM in Ae. aegypti (inhibition of chitinase blocks transmission of Plasmodium) [ 172 ]. The important physiological functions of the PM suggest that it can be considered a significant structural target for the control of GpSGHV in the laboratory colonies of G. pallidipes. The potency of anti-chitinase antibodies to block transmission of pathogens has been demonstrated with the creation of Plasmodium-refractory mosquitoes [ 173 ]. A similar approach could be applied in GpSGHV management in G. pallidipes colonies.
Orally-infected G. pallidipes flies secrete infectious GpSGHV particles via saliva [ 52 ]. In contrast, when micro-injected with GpSGHV suspension, the flies did not secrete any detectable viral particles during the same duration of membrane feeding events [ 93 ]. Notably, expression of SGH symptoms in the F
Taken together, the invasion of G. pallidipes ovaries by GpSGHV could take place only during the later larviposition cycles. Since maturation of eggs begins shortly after blood meal ingestion [ 174 ], it is unlikely that GpSGHV in the blood meal would have sufficient time to infect the midgut, disseminate through the hemocoel to the ovaries and infect the developing oocytes immediately following the initial virus-contaminated blood meals. Therefore, trans-ovarial transmission of GpSGHV would not occur until the subsequent larviposition cycles after the infectious blood meal advance.
Many insect-pathogenic viruses such as baculoviruses are effective bio-control agents against insect pests [ 175 , 176 ]. The potential of GpSGHV as a male sterility factor in tsetse control was first proposed in 1988 [ 74 ]. After micro-injection of the virus into laboratory-bred G. pallidipes, infection was observed in 13.3% and 30.0% of treated male and female parent insects, respectively. The prevalence of SGH in the F
Application of GpSGHV as a bio-pesticide for tsetse control however, is technically challenging for several reasons. Firstly, recent findings show that neither micro-injection nor per os infection of the virus in G. pallidipes result in SGH syndrome in the same (parental) generation, rather, the syndrome is only detectable in the third (~65%) and fourth (~100%) larviposition cycles of the F
In view of the current understanding of GpSGHV epidemiology under laboratory conditions, two potential strategies to manage the viral infections in the colonies were considered. The first strategy was to reduce or inhibit horizontal GpSGHV transmission by either (a) modifying the feeding system currently used in the colony rearing [ 94 ], or (b) neutralizing the virus released via saliva into blood meals during membrane feeding by supplementing the blood meals with GpSGHV-specific antibodies, and/or (c) targeting virus ligands on host midgut cells with a phage display peptide library to block viral attachment to the midgut receptors [ 178 , 179 ]. The second strategy was to reduce or inhibit viral replication by: (d) oral administration of antiviral drugs to inhibit viral DNA polymerase [ 180 ], and (e) silencing essential GpSGHV genes by bacterially-expressed double-stranded RNA (dsRNA)-RNAi. Preliminary data so far obtained from the immune-intervention strategies, i.e., neutralizing antibodies, phage display technologies, and RNAi have shown potential to significantly reduce GpSGHV infections. Currently, these immune-intervention strategies are being optimized.
The objective of various research reviewed in this paper was the development of a cost-effective strategy to manage the GpSGHV infections in G. pallidipes colonies. This was finally achieved mainly by modification of the in vitro membrane feeding regime routinely practiced in tsetse mass-rearing facilities. Since the membrane feeding favored horizontal viral transmission, it was conceptualized that modifications of the colony maintenance protocol(s) would significantly reduce GpSGHV transmission. The routine in vitro feeding regime involved feeding up to 10 sets of fly cages in succession [ 181 ], thus significantly augmenting horizontal GpSGHV transmission in the colonies. In the modified feeding regime, each fly-holding cage was provided with fresh blood at each meal to prevent flies from picking up any virus deposited via saliva into the during feeding of earlier fly cages [ 94 ]. Within 2 years of implementation of the modified feeding regime, GpSGHV loads in the fly colonies were significantly reduced and maintained at levels not detrimental to the survival and productivity of the colonies. More importantly, the SGH syndrome that causes colony collapse [ 28 ], was completely eliminated [ 94 ]. Additionally, the modified feeding regime is applicable in combination with other management strategies, for instance oral administration of the antiviral drugs in an integrated approach [ 180 ], or supplementing blood meals with GpSGHV-specific antibodies. The implications of the successful GpSGHV management in G. pallidipes colonies are discussed in sub- Section 8.3.
The membrane feeding system used in the tsetse mass-production facility located in Tanga, Tanzania greatly contributed to the production and release of ~8.5 million sterile males between 1994 to 1997, resulting in a crash of the G. austeni population in the Unguja Island [ 47 ]. However, attempts to mass-produce G. pallidipes for the SIT component of AW-IMP programs on mainland Africa were faced with difficulties because this tsetse species is susceptible to infections by GpSGHV. The virus has caused collapse of G. pallidipes colonies that were initiated in Ethiopia and Seibersdorf, Austria, and thus prevented full implementation of the release component. Now that strategies are available to successfully manage GpSGHV infections that can result in complete elimination of SGH from G. pallidipes colonies, production of sufficient numbers of sterile males is within reach. This success provides opportunity to revive the SIT component of the program to eradicate G. pallidipes from the fertile Rift Valley lands of Ethiopia [ 182 ]. This would translate into availability of more animals for plowing the fertile land, more milk, and manures to plant crops—in short, a permanent eradication of poverty and improvement of living standards. Similarly, other sub-Sahara African countries infested with trypanosome-transmitting tsetse species would benefit from this success. It should be noted that, although GpSGHV has not been shown to cause serious problems in other tsetse species, the virus infects G. fuscipes fuscipes, G. morsitans and G. swynnertoni, irrespective of their ages, sex, and season of the year [ 183 ]. Therefore, if GpSGHV (or a similar virus) will be problematic in the future, the research reviewed in this paper provides a solid basis to deal with the problem. The current knowledge and experiences in large-scale production of G. pallidipes can be used to make recommendations on standard operational procedures (SOPs) for the management of GpSGHV in large-scale tsetse fly production facilities. The proposed SOP is detailed in Supplementary File 1.
The aim of this review was to highlight the intricacies associated with the occurrence of a newly described group of viruses, the hytrosaviruses, and the interaction with their dipteran hosts. The common denominators are the structure and genome content of these viruses and their potential to induce the SGH syndrome. Despite the knowledge of the genome and proteome, very little is known about the regulation of viral gene expression and the interaction of viral proteins with the dipteran host and its microbiome and parasites. Nevertheless, the wealth of information available in a relatively short period through the concerted efforts of many research groups [ 184 ] allowed the mitigation and control of SGH in tsetse fly colonies and set the stage for the development of more advanced strategies for tsetse fly control to eliminate trypanosomosis. A future challenge for virologists is to understand the natural role of hytrosaviruses in dipteran fly ecology and evolution.
Many of the studies reviewed in this paper were pioneered and fostered by the Joint FAO/IAEA Division of Nuclear Techniques in Food and Agriculture, Seibersdorf, Austria. Most of the researches were done under the auspice of a Coordinated Research Project (No. D42012). The authors are indebted to The Netherlands Fellowship Program for a PhD Grant (No. CF7548/2011) awarded to Henry M. Kariithi for a Sandwich PhD program at the Laboratory of Virology, Wageningen University, The Netherlands.
Click here for additional data file.
The authors declare no conflict of interest.


Created by Ryan Vanderwerf / @RyanVanderwerf - OCI
Getting Groovy with Lego Mindstorms EV3 (me)
We got familar with the lejos API and built and pushed robot Groovy code to the robots. After that we used the Ev3Rover Grails app to remote control the robots from our PCs and phones.
Rest With Grails 3 (Jeff Scott Brown)
Attendees got together and learned the ins and outs of building REST APIs with Grails3. They learned the @Resource annotation, RestFul controllers, and writing functional tests. He also showed how to build custom renderers, and the new json-views API to customize views.
This session demonstrates the Grails 3.1 improved profile system. We created a back-end using Grails 3 REST API, front-end using Grails AngularJS profile and used spring-security-rest for securing REST API. (ripped from toTheNew blog)
Gradle Workshop (Andres Almiray)
Andres started the session explaining the basics of Gradle, how it works, the tasks, dependencies,… and at the end we even created a plugin! It was a really nice workshop and I learnt a lot things about Gradle. (ripped from Ivan Lopez blog)
Groovy and Spock for Beginners (Jacob Mikkelsen)
Jacob gave a great workshop on the basics of Spock and Groovy. Material is at http://bit.ly/1TJL56x
Hackergarten on Tour (Andres Almiray)
Andres Almiray led the Hackergarten this year again. His energy is very good and high which helps get people motivated for some open source contibutions. Lots was done, I think several Spock issues merged, progress on Elastic Search 2 plugin for Grails 3, fixes for lazybones templates on Android Wear. One thing that will be good for Grails got lots of progress on a converter for the old gdoc format to ascii doctor here! Also a new Gradle Groovydoc plugin that forks the jvm here.
Conference Day 1
Keynote with Ken Kousen
Funny tweets
Guillaume talked about the history of Groovy, it's progress, and where it's headed (it's bright!)
Slides at http://bit.ly/28Kb1yX
Jeff shows the Dropwizard-metrics plugin, JMeter, and JMX Services available in Grails 3
Slides at http://bit.ly/28KbukK
Noam gave great tips on writing clean code in Groovy that will make it easier to refactor and code review with peers later.
Slides at http://bit.ly/28KwiLf
It was a frank upbeat discussion starting out with ribbing Gradle on Kotlin of course, then talking about what can be done to help drive Groovy adoption forward. Again the Eclipse support bubbled to the top again. Average Joe it seems misses the support in Eclipse and is lost without it.
Marcin gave a great deep dive into things you may have not known about Spock framework that would be useful.
Slides at http://bit.ly/28KwiLf
@hseth showed his his live streaming platform build on on grails.
More at http://gr8conf.eu/#/talk/308
OCI Team held an open forum answering common questions about Grails
Ken Kousen gave his talk about getting familar with Gradle while building Android apps
Jacob showed us some ways he's used tools of the ecosystem to hook people on Groovy
Slides at http://bit.ly/28Kt6kJ
Michel shared his experiences on upgrading Grails 2 apps to Grails 3
Slides at http://bit.ly/28KtjEl
Mario shared his experiences Dockerizing his company's Grails App
Slides at http://bit.ly/28KAcXk
Sergio shared how to use Geb to scrape web pages
Slides at http://bit.ly/28K8R3F
Alvaro talked about the ins and outs of making Grails 3 plugins
Slides at http://bit.ly/28M7jYy
Jennifer talked about using CodeNARC to keep your code in shape.
Slides at http://bit.ly/28JkK9B
Sasha talked about good UI and graphics design in your application.
Slides at http://bit.ly/28JPo1h
Grame shows the history of GORM and some new cool stuff about GORM 5 and Rx-Gorm.
Slides at http://bit.ly/28Kzl5W
Ivan gives a soup to nuts examples of building a Full Stack Groovy app with examples!
Slides at http://bit.ly/28Jltrc
Danny gives a good talk on how to build Ratpack Apps quickly.
Slides at http://bit.ly/28L87hT
I give my Alexa talk on Amazon Echo and friends, using Groovy Lambda and Grails Apps (More next meeting!)
Slides at http://bit.ly/28Lh0Gi
Cedrik shows how to handle variants in Gradle, important especially to native building.
Slides at http://bit.ly/28KA6vS
Puneet shows how to help out the community by helping migrate plugins from Grails 2 to 3. His company ToTheNew has helped migrate many plugins to Grails 3.
Slides at http://bit.ly/28JlDPti
Sergio shows a clever way he build an Android app for Greach using Groovy, Android, and Wordpress together.
Slides at http://bit.ly/28JWcv9
Jennifer shows how to build APIs in Grails using a TDD approach.
Slides at http://bit.ly/28MaZti
Sasha talks about using Groovy to the maximum on Jenkins.
Slides at http://bit.ly/28Kz0lC
Jeff shows us how it's done when writing tests for your Grails 3 apps.
Slides at http://bit.ly/28Jmik5
Noame shows us how to dockerize the deployment if your Ratpack app.
Slides at http://bit.ly/28KFh1s
We get together for some Mexican food (ha!) in Denmark
The speakers head out on a Segway tour in Copenhagen. They are easier than I thought to drive!
Lastly we head to Tivoli Gardens with the last energy we have. Thanks Gr8Conf!
Free free to contact me on twitter or google+ @RyanVanderwerf or email rvanderwerf@gmail.com


This is a paragraph of text.
Code block that is not part of paragraph
This is a paragraph of text. Code block that is not part of paragraph


Hello All,
I have had my emonTH unit up and running for a couple days and decided to put out a hobo data logger I have to compare accuracy for the temp and humidity readings in my house. Both are taking samples on a 60sec basis. Over the couple hours I had the hobo running it captured the thermostat cycle pretty well from 66.8F to 65.8F and read the humidity level at an average of about 42%RH (Im in heating mode at my house. Outside is about 52F, 96%RH). The emonTH unit has been reading between 64.8F and 65.8F, fluctuating in a similar manner to the hobo readings with the thermostat cycle, but not in quite as much detail (somewhat hard to see without zooming in closer on the multi graph). It is reading the humidity at an average of about 38%RH.
So my question is, is this pretty good for the emonTH unit? Screen shots of the hobo readout and emonTH multigraph below.
Also, because my brain thinks in Fahrenheit, the process for my temperature input data is (X 0.1) (X 9) (X 0.2) (+ 32) then log to feed. For humidity just (X 0.1) and log to feed.
Dashboard with multigraph: http://emoncms.org/pksmith
Re: EmonTh Accuracy
My experience with the EmonTh is that is registers the same temperature as my heating thermostat mounted besides it. Although the thermostat only shows steps of halve degrees Celsius.
Re: EmonTh Accuracy
Update: I continued to let the HOBO logger run for the rest of the week. Looking at the plots of the HOBO data and the emonTH temp and RH readings it seems that they both have the same profile, the emonTH appears to be reading a few degrees and RH% values lower than the HOBO. I have attached the plots for comparison. I would tend to believe the HOBO logger has the 'more accurate' readings, but I am pleased with the emonTH's performance. Not to far off from the HOBO.
Also, both the emonTH and HOBO loggers were placed within a few inches of each other by my thermostat.
Re: EmonTh Accuracy
FWIW, I've been running an emonTH and an emonTX at the same position for a while and both were really close (about 0.1 or 0.2°C difference).
Then I moved the emonTH to the other side of the room, about 2 meters high, while the TX was close to the floor, and there was a huge difference. The temperature on the floor has much less variations than the temperature under the ceiling. The effect of the position is much more important than I expected. And it is not just an offset. There was much more dynamics at ceiling level. The ground is not affected by the heater that much.
I know you put all your sensors at the same place, but I'm mentioning this anyway for anyone wanting to run comparisons.
Re: EmonTh Accuracy
Interesting observation. We I do industrial energy audits we often check the temperature gradient from the ceiling to the shop floor and recommend destratification fans to take advantage of the warm air at the ceiling during winter months. I have also found that the ceiling fans in my house have winter and summer modes (the direction the fan spins can be reversed in the winter to drive some of the warmer air down).
Re: EmonTh Accuracy
Update: I have my second emonTH up and running now. I have noticed that my original unit (used to make the graphs above) is reading about 2-3 deg. lower than my new unit. The new unit is reading exactly what my thermostat reads, the original has always been 2-3 deg. lower. I decided to just add a process adding 2 degrees to the raw data in the input config setup to account for this. Both units seem to bee reading RH within 1 degree of eachother.
Re: EmonTh Accuracy
Out of curiosity, what happens if you exchange the RH/temp sensors on both modules ?


It's hard to read through a book on the principles of magic without glancing at the cover periodically to make sure it isn't a book on software design. -- Bruce Tognazzini [ source]


PPS Secondary Hybrid and Remote Schedules
Remote Schedules
Middle School
Middle School Remote Schedule
High School
Taconic Remote Schedule
PHS Remote Schedule
Hybrid Schedules
Middle School
TBD
High School
TBD


Parenting is without a doubt both the most rewarding and the most tiring thing I do, full stop, bar none. My daughters are amazing, and also they are full-fledged humans with all their own wants and needs… but still very little practice as yet at being humans.


Review: Your Friends And Neighbors (1998) A Review By: Ryan Davis
Your Friends And Neighbors is a rather bizarre film about 6 people, who hop in and out of bed with each other. Written and directed by Neil LaBute, who' s first film, "In The Company Of Men" was simply marvelous, disappoints a bit here with this one.
The story involves two couples(Ben Stiller & Catherine Keener and Aaron Eckhart & Amy Brenneman), an artist assistant(Nastassja Kinski), and an egotistical women abuser(Jason Patric). The character's names are not apparent and are not mentioned in the entire movie.
Each of the characters has their own sexual style and they don't seem to "merge" together well. So the group experiments behind their respective partners back. There are some hysterical scenes, one involves Jason Patric, Aaron Eckhart, and Ben Stiller's characters. They are all in a sauna, talking about their best "lay", when Jason Patric's character makes a surprising confession. The whole scene is hilarious and exceptionally well written and acted.
The enjoyed this movie, although it seemed a tad lengthy(even though it only runs 99 min.). The film's cast is exceptional with Oscar caliber performances by Catherine Keener, Aaron Eckhart, and Jason Patric. I would not recommend this film, to people who are offended by conversations that are very sexually explicit. It did seem to offend people, more than half of the people in the theater left during the film. Although Your Friends And Neighbors doesn't have the power of LaBute's earlier film it still manages to be somewhat entertaining and funny, while maintaining a melancholy philosophy on human relationships.
Grade: B+
-----== Posted via Deja News, The Leader in Internet Discussion ==----- http://www.dejanews.com/rg_mkgrp.xp Create Your Own Free Member Forum
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object edu.macalester.acs.server.AutocompleteServer
public class AutocompleteServer
A simple, extensible http autocomplete server.
This file's main method takes two arguments: a port to listen on, and a file that contains a transaction log of autocomplete entities. An autocomplete entity is an extensible (key, value) hashtables that supports any types supported by json. Three keys are required:
This server supports three actions:
Python example of reading from, and writing to the server:
TODO:import httplib conn = httplib.HTTPConnection("localhost", 10101) conn.request("POST", "/update", '{ "id" : "34a", "name" : "Bob", "score" : 300.2, "foo" : "bar"}') print conn.getresponse().read() >>> okay # execute an ajax query conn.request("GET", "/autocomplete?query=b&max=2") print conn.getresponse().read() >>> [{"id":"34a","name":"Bob","score":300.2,"foo":"bar"}, {"id":"20395","name":"Myrtle Beach","state":"South Carolina","score":99.9812292931998}]
| Constructor Summary | |
|---|---|
AutocompleteServer(AutocompleteTree<java.lang.String,AbstractEntity> tree,
java.io.File txPath,
int port)
Creates a new autocomplete server |
| Method Summary | |
|---|---|
void |
dump()
Replaces the transaction file with the contents of the current tree. |
int |
handle(HTTPServer.Request request,
HTTPServer.Response response)
Handles requests to the server. |
int |
handleAutocomplete(HTTPServer.Request request,
HTTPServer.Response response)
Completes an autocomplete query request. |
int |
handleUpdate(HTTPServer.Request request,
HTTPServer.Response response)
Completes a request to update an entry in the tree. |
static void |
main(java.lang.String[] args)
|
void |
reloadData()
Clears the tree and reloads it with entries from the transaction file. |
void |
start()
Starts the server. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public AutocompleteServer(AutocompleteTree<java.lang.String,AbstractEntity> tree, java.io.File txPath, int port) throws java.io.IOException
tree
- The autocomplete treetxPath
- The transaction path (populates and persists the tree)port
- The port to listen on
java.io.IOException
| Method Detail |
|---|
public void reloadData() throws java.io.IOException
java.io.IOException
public void dump() throws java.io.IOException
java.io.IOException
public void start() throws java.io.IOException
java.io.IOException
public int handle(HTTPServer.Request request, HTTPServer.Response response) throws java.io.IOException
request
- response
-
java.io.IOException
public int handleAutocomplete(HTTPServer.Request request, HTTPServer.Response response) throws java.io.IOException
request
- response
-
java.io.IOException
public int handleUpdate(HTTPServer.Request request, HTTPServer.Response response) throws java.io.IOException
request
- response
-
java.io.IOException
public static void main(java.lang.String[] args) throws java.io.IOException, java.lang.InterruptedException
java.io.IOException
java.lang.InterruptedException
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


One of the first Wiki's on GitHub releated to malicious software.
Alerta.exe
Type: Trojan
Language: C#/C++
Creator: Unknown
Download link
Alerta was created in 2006, where it spread through a fake email translated from Portugese to:
Alert! Your computer has been infected by a virus! This email is from Microsoft Team.
To delete the malware, please open this file (alerta.exe file)
Firstly, a red and white flashing screen popup is displayed at the center of the screen. The first text says (translated from Portugese to English):
"A HOMOSEXUAL TRYING TO USE THE COMPUTER WAS DETECTED!! DO YOU HAVE ANYTHING TO DO WITH IT?"
With the first button saying:
And the second button saying:
The TaskManager get's locked, aswell as ALT, CONTROL, and the Windows key.
There's a catch though. As soon as you try press the "NO!!!" button, it moves away from the cursor.
Even trying hitting the Enter key while having the button selected will not work.
Simply, you get
forced to press yes.
When pressing the yes button, you'll be locked with a bright pink screen, and white text stating:
"I'm going to crash your computer for 5 minutes.
Meanwhile you can see this screen with those strong colors that must be fixing your eyes."
After waiting for about 5 minutes, the white text is changed to:
"AS YOU AND THE BOSS HAD TO WAIT THE TIME... HAHAHAHAHA.


This module provides classes and functions that are usefull for testing PyObjC itself including the framework wrappers.
Warning
This module is primarily used for testing PyObjC and the API isn’t fully stable.
Returns the SDK version used to compile Python, or None when no version can be calculated.
The SDK version is a tupel with the major and minor versions of Mac OS X (for example (10, 8)).
Returns the integer value of a four character code “literal”.
The value is a byte string of length 4 and contains the contents of the char C literal with the four character code, for example b"abcd".
Return value as if it were a 4 byte integer (using the overflow behavior of most CPUs)
Return value as if it were a 8 byte integer (using the overflow behavior of most CPUs)
Return value as if it were a 4 byte unsigned integer ( using the overflow behavior of C)
Return value as if it were a 8 byte unsigned integer (using the overflow behavior of C)
Returns the major release of Mac OS X on the current machine, for example “10.5” on all systems running a version of Leopard.
Decorator for enabling tests only when an expression is true. This is the same as skipUnless in Python 2.7 or later.
Decorator for enabling a test only when using Python 2.x.
This is basicly onlyIf(sys.version_info[0] == 2).
Decorator for enabling a test only when using Python 3.x.
This is basicly onlyIf(sys.version_info[0] == 3).
Decorator for enabling a test only when the process is running in 32-bit mode.
Decorator for enabling a test only when the process is running in 64-bit mode.
Decorator for enabling a test only when running on a recent enough release of Mac OS X.
Decorator for enabling a test only when running on a old enough release of Mac OS X.
A with-statement context that adds a filter to the warnings module while the body of the statement is running.
This is similar to warnings.catch_warnings.
A subclass of unittest.TestCase with some addition functionality. The most important addition is that each test gets run with a fresh autorelease pool.
Asserts that sequences seq1 and seq2 have the same members (in any order).
Asserts that value is greater than test.
Asserts that value is greater than or equal to test.
Asserts that value is less than test.
Asserts that value is less than or equal to test.
Asserts that value is the same object as test
Asserts that value is not the same object as test
Assert that value is a string that starts with check.
Assert that value has an attribute named key.
Assert that value does not have an attribute named key.
Assert that value is an instance of types.
Assert that value is not an instance of types.
Assert that val1 is almost equal to val2 (that is, the difference between the two values is less that 1e-5)
Assert that value is a member of seq.
Assert that value is not a member of seq.
Asserts that tp is a wrapper class for a CoreFoundation type.
Asserts that tp is a wrapper class for an opaque pointer (“handle”)
Asserts that the callable has metadata that indicates that the callable is variadic function where the argument list is terminated by a null value.
Asserts that the callable has metadata that indicates that the result is a null terminated array.
Asserts that the callable has metadata that indicates that the argument argno is a null terminated array.
Asserts that the callable has metadata that indicates that the result is an array with an unspecified size.
Asserts that the callable has metadata that indicates that the argument argno is an array with an unspecified size.
Assert that the callable has metadata that specifies that it is a variadic function with a printf-format string in argument argno.
Assert that the callable has metadata that specifies that the retain count of the result is increased by the function (that is, the caller owns the value after the call).
Assert that the callable has metadata that specifies that the retain count of the result is not increased by the function.
Assert that the callable has metadata that specifies that the retain count of argument argno is increased by the function (that is, the caller owns the value after the call).
Note
used to check the behavior of output arguments.
Assert that the callable has metadata that specifies that the retain count of argument argno is not increased by the function.
Note
used to check the behavior of output arguments.
Assert that the callable has metadata that specifies that the retain count of the result is increased by the function (that is, the caller owns the value after the call).
Assert that the callable has metadata that specifies that the retain count of the result is not increased by the function.
Assert that the callable has metadata that specifies that the retain count of argument argno is increased by the function (that is, the caller owns the value after the call).
Note
used to check the behavior of output arguments.
Assert that the callable has metadata that specifies that the retain count of argument argno is not increased by the function.
Note
used to check the behavior of output arguments.
Assert that the result has a specific type encoding.
Assert that the result has type BOOL.
Assert that the argument argno has a specific type encoding.
Assert that the argument argno has type BOOL.
Assert that argument argno is a function with a specific type signature. If retained is true the function stores the function reference beyond the end of the function call.
Assert that the result is a block with a specific type signature.
Assert that argument argno is a block with a specific type signature.
Assert that argument argno is a SEL value for a method with a specific type signature
Assert that argument argno is an array of count elements.
Assert that the result is an array of where the size of the array is specified in argument count.
Assert that argument argno is an array of where the size of the array is specified in argument count.
count can also be an tuple of two elements: the first elements specifies the size before the call, the second the size after the call.
Assert that argument argno is a pass-by-reference output parameter.
Assert that argument argno is a pass-by-reference input parameter.
Assert that argument argno is a pass-by-reference input and output parameter.
Note
There are also a number of deprecated aliases for the methods above, those are intentionally not documented.


This page shows #nowplaying tweets in San Francisco that contain a YouTube link. It also allows you to post a #nowplaying tweet with a YouTube Link.


From Aligned to Unaligned Checkpoints - Part 1: Checkpoints, Alignment, and Backpressure
October 15, 2020 - Arvid Heise Stephan EwenApache Flink’s checkpoint-based fault tolerance mechanism is one of its defining features. Because of that design, Flink unifies batch and stream processing, can easily scale to both very small and extremely large scenarios and provides support for many operational features like stateful upgrades with state evolution or roll-backs and time-travel.
Despite all these great properties, Flink’s checkpointing method has an Achilles Heel: the speed of a completed checkpoint is determined by the speed at which data flows through the application. When the application backpressures, the processing of checkpoints is backpressured as well (Appendix 1 recaps what is backpressure and why it can be a good thing). In such cases, checkpoints may take longer to complete or even time out completely.
In Flink 1.11, the community introduced a first version of a new feature called “unaligned checkpoints” that aims at solving this issue, while Flink 1.12 plans to further expand its functionality. In this two-series blog post, we discuss how Flink’s checkpointing mechanism has been modified to support unaligned checkpoints, how unaligned checkpoints work, and how this new mode impacts Flink users. In the first of the two posts, we start with a recap of the original checkpointing process in Flink, its core properties and issues under backpressure.
State in Streaming Applications #
Simply put, state is the information that you need to remember across events. Even the most trivial streaming applications are typically stateful because of their need to “remember” the exact position they are processing data from, for example in the form of a Kafka Partition Offset or a File Offset. In addition, many applications hold state internally as a way to support their internal operations, such as windows, aggregations, joins, or state machines.
For the remainder of this article, we’ll use the following example showing a streaming application consisting of four operators, each one holding some state.
State Persistence through Checkpoints #
Streaming applications are long-lived. They inevitably experience hardware and software failures but should, ideally, look from the outside as if no failure ever happened. Since applications are long-lived — and can potentially accumulate very large state —, recomputing partial results after failures can take quite some time, and so a way to persist and recover this (potentially very large) application state is necessary.
Flink relies on its state checkpointing and recovery mechanism to implement such behavior, as shown in the figure below. Periodic checkpoints store a snapshot of the application’s state on some Checkpoint Storage (commonly an Object Store or Distributed File System, like S3, HDFS, GCS, Azure Blob Storage, etc.). When a failure is detected, the affected parts of the application are reset to the state of the latest checkpoint (either by a local reset or by loading the state from the checkpoint storage).
Flink’s checkpoint-based approach differs from the approach taken by other stream processing systems that keep state in a distributed database or write state changes to a log, for example. The checkpoint-based approach has some nice properties, described below, which make it a great option for Flink.
-
Checkpointing has very simple external dependencies: An Object Storage or a Distributed FileSystem are probably the most available and easiest-to-administer services. Because these are available on all public cloud providers and among the first systems to provide on-premises, Flink becomes well-suited for a cloud-native stack. In addition, these storage systems are cheaper by an order of magnitude (GB/month) when compared to distributed databases, key/value stores, or event brokers.
-
Checkpoints are immutable and versioned: Together with immutable and versioned inputs (as input streams are, by nature), checkpoints support storing immutable application snapshots that can be used for rollbacks, debugging, testing, or as a cheap alternative to analyze application state outside the production setup.
-
Checkpoints decouple the “stream transport” from the persistence mechanism: “Stream transport” refers to how data is being exchanged between operators (e.g. during a shuffle). This decoupling is key to Flink’s batch <-> streaming unification in one system, because it allows Flink to implement a data transport that can take the shape of both a low-latency streaming exchange or a decoupled batch data exchange.
The Checkpointing Mechanism #
The fundamental challenge solved by the checkpointing algorithm (details in this paper) is drawing a snapshot out of the ever-changing state of a streaming application without suspending the continuous processing of events. Because there are always events in-flight (on the network, in I/O buffers, etc.), up- and downstream operators can be processing events from different times: the sink may write data from 11:04, while the source already ingests events from 11:06. Ideally, all snapshotted data should belong to the same point-in-time, as if the input was paused and we waited until all in-flight data was drained (i.e. the pipeline becoming idle) before taking the snapshot.
To achieve that, Flink injects checkpoint barriers into the streams at the sources, which travel through the entire topology and eventually reach the sinks. These barriers divide the stream into a pre-checkpoint epoch (all events that are persisted in state or emitted into sinks) and a post-checkpoint epoch (events not reflected in the state, to be re-processed when resuming from the checkpoint).
The following figure shows what happens when a barrier reaches an operator.
Operators need to make sure that they take the checkpoint exactly when all pre-checkpoint events are processed and no post-checkpoint events have yet been processed. When the first barrier reaches the head of the input buffer queue and is consumed by the operator, the operator starts the so-called alignment phase. During that phase, the operator will not consume any data from the channels where it already received a barrier, until it has received a barrier from all input channels.
Once all barriers are received, the operator snapshots its state, forwards the barrier to the output, and ends the alignment phase, which unblocks all inputs. An operator state snapshot is written into the checkpoint storage, typically asynchronously while data processing continues. Once all operators have successfully written their state snapshot to the checkpoint storage, the checkpoint is successfully completed and can be used for recovery.
One important thing to note here is that the barriers flow with the events, strictly in line. In a healthy setup without backpressure, barriers flow and align in milliseconds. The checkpoint duration is dominated by the time it takes to write the state snapshots to the checkpoint storage, which becomes faster with incremental checkpoints. If the events flow slowly under backpressure, so will the barriers. That means that barriers can take long to travel from sources to sinks resulting in the alignment phase to take even longer to complete.
Recovery #
When operators restart from a checkpoint (automatically during recovery or manually during deployment from a savepoint), the operators first restore their state from the checkpoint storage before resuming the event stream processing.
Since sources are bound to the offsets persisted in the checkpoint, recovery time is often calculated as the sum of the time of the recovery process — outlined in the previous figure — and any additional time needed to process any remaining data up to the point right before the system failure. When an application experiences backpressure, recovery time can also include the total time from the very start of the recovery process until backpressure is fully eliminated.
Consistency Guarantees #
The alignment phase is only necessary for checkpoints with exactly-once processing semantics, which is the default setting in Flink. If an application runs with at-least-once processing semantics, checkpoints will not block any channels with barriers during alignment, which has an additional cost from the duplication of the then-not-blocked events when recovering the operator.
This is not to be confused with having at-least-once semantics only in the sinks — something that many Flink users choose over transactional sinks — because many sink operations are idempotent or converge to the same result (like inputs/outputs to key/value stores). Having at-least-once semantics in an intermediate operator state is often not idempotent (for example a simple count aggregation) and hence using exactly-once checkpoints is advisable for the majority of Flink users.
Conclusion #
This blog post recaps how Flink’s fault tolerance mechanism (based on aligned checkpoints) works, and why checkpointing is a fitting mechanism for a fault-tolerant stream processor. The checkpointing mechanism has been optimized over time to make checkpoints faster and cheaper (with both asynchronous and incremental checkpoints) and faster-to-recover (local caching), but the basic concepts (barriers, alignment, operator state snapshots) are still the same as in the original version.
The next part will dig into a major break with the original mechanism that avoids the alignment phase — the recently-introduced “unaligned checkpoints”. Stay tuned for the second part, which explains how unaligned checkpoints work and how they guarantee consistent checkpointing times under backpressure.
Appendix 1 - On Backpressure #
Backpressure refers to the behavior where a slow receiver (e.g. of data/requests) makes the senders slow down in order to not overwhelm the receiver, something that can result in possibly dropping some of the processed data or requests. This is a crucial and very much desirable behavior for systems where completeness/correctness is important. Backpressure is implicitly implemented in many of the most basic building blocks of distributed communication, such as TCP Flow Control, bounded (blocking) I/O queues, poll-based consumers, etc.
Apache Flink implements backpressure across the entire data flow graph. A sink that (temporarily) cannot keep up with the data rate will result in the source connectors slowing down and pulling data out of the source systems more slowly. We believe that this is a good and desirable behavior, because backpressure is not only necessary in order to avoid overwhelming the memory of a receiver (thread), but can also prevent different stages of the streaming application from drifting apart too far.
Consider the example below:
- We have a source (let’s say reading data from Apache Kafka), parsing data, grouping and aggregating data by a key, and writing it to a sink system (some database).
- The application needs to re-group data by key between the parsing and the grouping/aggregation step.
Let’s assume we use a non-backpressure approach, like writing the data to a log/MQ for the data re-grouping over the network (the approach used by Kafka Streams). If the sink is now slower than the remaining parts of the streaming application (which can easily happen), the first stage (source and parse) will still work as fast as possible to pull data out of the source, parse it, and put it into the log for the shuffle. That intermediate log will accumulate a lot of data, meaning it needs significant capacity, so that in a worst case scenario can hold a full copy of the input data or otherwise result in data loss (when the drift is greater than the retention time).
With backpressure, the source/parse stage slows down to match the speed of the sink, keeping both parts of the application closer together in their progress through the data, and avoiding the need to provision a lot of intermediate storage capacity.
We’d like to thank Marta Paes Moreira and Markos Sfikas for the wonderful review process.


Physicians' Pharma Relationships 2013-14
Payments from Pharmacuetical Companies
Medicare Part D Prescriptions Written - 2013


Ms Drouillard is French Teacher. She runs short courses that have between 7 and 10 students in each class. She sets tests every week that are scored out of 30.
Students must acheive a score of at least 10 to pass each test and points are only recorded if the student passes the test. Score are always whole numbers.
Students need to achieve a total of 50 points to pass the course.
She has asked you to make a system that does the following:
| (position) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| studentNames | Abe | Ben | Carl | Dan | Emi | Flo | Gwen | Hal | Ian | Jeff |
| testScore | 27 | 34 | 52 | 12 | 18 | 43 | 19 | 35 | 12 | 34 |
public static void Main (string[] args) {
string[] studentNames = new string[] {};
int[] testScores = new int[10];
}
public static void Main (string[] args) {
string[] studentNames = new string[] {};
int[] testScores = new int[10];
}
/*
static void inputNames()
{ }
static void inputScores()
{ }
static void displayStudentsWhoPassed()
{ }
*/
Note - these are commented out as more will need to be done before these are anywhere near functional.
Technically we can hard code this function to return one set of names (the problem only says 'Holds the names of all students in the class') but we will set this up to allow the user to input names..
This function should allow the user to enter a score for each student, add the new scores to the current totals score and return the new totals.
This function looks at the total for each student and displays the names of all students who scored over 50 points.
static string[] inputNames()
{
return new string[] { "Amy", "Ben", "Carol", "Dean", "Even", "Francesca", "George"};
}
static int[] inputScores(string[] studentNames, int[] testScores)
{
return new int[] { 30, 55, 27, 80, 12, 70, 12};
}
static void displayStudentsWhoPassed(string[] studentNames, int[] testScores)
{
Console.WriteLine("The following students have passed the course:\nBen, \nDean, \nFrancesca,");
}
public static void Main (string[] args)
{
string[] studentNames = new string[] {};
int[] testScores = new int[10];
studentNames = inputNames();
while(true)
{
testScores = inputScores(studentNames, testScores);
displayStudentsWhoPassed(studentNames, testScores);
Console.ReadLine();
}
}
This will now run for ever which is why I have added a ReadLine, you can take this out later.